leitura e pesquisa num arquivo de texto.
A leitura é feita na janela do programa,
que conta com um ScrollPane para rolagem
das linhas.
Num textfield inserimos a palavra à procurar,
e se for encontrada, o programa conta quantas
linhas possuem a palavra inserida,
e marca o texto da linha inteira com fonte
em outra cor para destaque.
Veja abaixo um vídeo do programa em execução:
Veja abaixo uma imagem do programa em execução:
Veja abaixo o código do programa:
//Programa pesquisa em arquivo
//23/11/2018 - 20:02
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.ScrollPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javafx.geometry.Insets;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.BorderPane;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
public class PROJETO extends Application {
static StringBuilder st = new StringBuilder ( );
static StringBuilder st1 = new StringBuilder ( );
static String str1 = "";
static String str_2 = "";
static String str_3 = "";
static String str_4 = "";
static int a = 0, c = 0, i = 1, k = 0;
static Boolean x = false;
static Group root = new Group ( );
static VBox vbox = new VBox ( );
static Scene scene = new Scene ( vbox, 600, 300, Color.BLACK );
static Canvas canvas = new Canvas ( 600, 1530 );
static GraphicsContext ctx = canvas.getGraphicsContext2D
( );
static ScrollPane s1 = new ScrollPane ( );
static BorderPane bord = new BorderPane ( );
private static File file = new File ( "H:\\eclipse
luna_two\\"
+ "PROJETO\\PROJETO\\src\\380.txt" );
private static int SIZE = 71;
static String [ ] str = new String [ SIZE ];
static String [ ] oc = new String [ str.length ];
static String [ ] str_0 = new String [ str.length ];
static MenuBar menuBar = new MenuBar ( );
static Menu arq = new Menu ( "Arq" );
static MenuItem pesq = new MenuItem ( "Pesquisa" );
static MenuItem sair = new MenuItem ( "Sair" );
//
/////////////////////////////////////////////////////////////////////////
public static void Menu ( Stage stage ) {
pesq.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent e ) {
// Coluna, linha,
comprimento, altura
// Apagando uma linha
ou partes
if ( x == true )
ctx.clearRect ( 10, 50, 400, 40 );
str_2 = "";
str_3 = "";
str_4 = "";
i = 0;
a = 0; c = 0; k = 0;
textFieldArr ( );
}
} );
/////////////////////////////////////////////////////////
sair.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent e ) {
System.exit ( 0 );
}
} );
/////////////////////////////////////////////////////////
pesq.setAccelerator ( new KeyCodeCombination (
KeyCode.E,
KeyCombination.CONTROL_DOWN ) );
sair.setAccelerator ( new KeyCodeCombination (
KeyCode.C,
KeyCombination.CONTROL_DOWN ) );
arq.getItems ( ).addAll ( pesq, sair );
menuBar.getMenus ( ).add ( arq );
}
//
/////////////////////////////////////////////////////////////////////////
private final static void Leitura ( ) throws IOException {
ctx.setFont ( Font.font ( "Helvetica", FontWeight.NORMAL,
FontPosture.ITALIC, 15 ) );
BufferedReader f = new BufferedReader ( new FileReader ( file ) );
int a = 0;
while ( ( str [ i ] = f.readLine ( ) ) != null ) {
a++;
st.append ( str [ i ] + "\n" );
st1.append ( a + "\n" );
}
f.close ( );
ctx.setFill ( Color.RED );
ctx.fillText ( "" + st1, 10, 110 );
ctx.setFill ( Color.BLACK );
ctx.fillText ( "" + st, 50, 110 );
}
//
/////////////////////////////////////////////////////////////////////////
private final static void Ler_Linha_Arquivo ( ) throws IOException {
ctx.setFont ( Font.font ( "Helvetica", FontWeight.NORMAL,
FontPosture.ITALIC, 15 ) );
BufferedReader f = new BufferedReader ( new FileReader ( file ) );
int a = 0;
boolean achou = false;
while ( ( str [ i ] = f.readLine ( ) ) != null ) {
a++;
str_0 [ c ] = str [ i ] + "\n";
c++;
st1.append ( c + "\n" );
}
f.close ( );
for ( i = 0; i < str_0.length; i++ ) {
// toLowerCase() ignora fontes maiúscula
e menúscula
if ( str_0 [ i ].toLowerCase ( ).contains ( str_3.toLowerCase ( ) ) ) {
achou = true;
oc [ k ] = str_0 [ i ];
k++;
str_2 = str_2 + str_0 [ i ];
} else {
oc [ k ] = "\n";
str_2 = str_2 + oc [ k ];
}
}
str_4 += k;
if ( k == 1 && achou == true ){
ctx.setFill ( Color.BLACK );
ctx.fillText ( "Só uma linha
possui a palavra ", 50, 70 );
ctx.setFill ( Color.RED );
ctx.fillText ( str_3, 250, 70 );
ctx.setFill ( Color.RED );
ctx.fillText ( str_2, 50, 110 );
x = true;
}
else if ( k > 1 && achou == true ) {
ctx.setFill ( Color.RED );
ctx.fillText ( str_4, 50, 70 );
ctx.setFill ( Color.BLACK );
ctx.fillText ( "linhas
possuem a palavra ", 80, 70 );
ctx.setFill ( Color.RED );
ctx.fillText ( str_3, 255, 70 );
ctx.setFill ( Color.RED );
ctx.fillText ( str_2, 50, 110 );
x = true;
} else {
Toolkit.getDefaultToolkit ( ).beep ( );
ctx.fillText ( "Nenhuma ocorrência
da palavra ", 50, 70 );
ctx.setFill ( Color.RED );
ctx.fillText ( str_3, 300, 70 );
x = true;
}
}
//
/////////////////////////////////////////////////////////////////////////
public static VBox textFieldArr ( ) {
TextField textField_1 = new TextField ( );
HBox hbox_1 = new HBox ( textField_1 );
// Posiciona o textfield no local escolhido
hbox_1.setPadding ( new Insets ( -295, 0, 0, 65 ) );
// Limita o textfield para no máximo trinta
colunas
textField_1.setPrefColumnCount ( 30 );
// Insere uma pequena mensagem ao usuário
textField_1.setPromptText ( "Digite uma
palavra" );
textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
@Override
public void handle ( KeyEvent event ) {
// convertendo string
para inteiro
if ( event.getCode ( ) == KeyCode.ENTER ) {
//Copia o conteúdo do
TextField em String
str_3 += textField_1.getText ( ).toString ( );
try {
Ler_Linha_Arquivo ( );
} catch ( IOException e ) {
}
// Oculta o textfield
textField_1.setVisible ( false );
}
}
} );
vbox.getChildren ( ).addAll ( hbox_1 );
return vbox;
}
//
/////////////////////////////////////////////////////////////////////////
@Override
public void start ( Stage stage ) throws IOException {
stage.setTitle ( "JAVAFX -
LENDO ARQUIVO E PESQUISANDO" );
// Criando moldura em torno do ScrollPane
s1.setStyle ( "-fx-padding:
5;" + "-fx-border-style: solid inside;"
+ "-fx-border-width:
4;" + "-fx-border-insets: 5;"
+ "-fx-border-radius:
5;" + "-fx-border-color: black;" );
// Adicionando o canvas no Scroll
s1.setContent ( canvas );
ctx.setFill ( Color.RED );
// Usando fonte em italic
ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
ctx.fillText ( "JAVAFX -
LENDO ARQUIVO E PESQUISANDO", 120, 15 );
ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 15 ) );
ctx.setFill ( Color.BLUE );
ctx.fillText ( "Imprimindo
abaixo o arquivo aberto", 160, 40 );
// Posiciona o local exato da barra de menu
bord.setPadding ( new Insets ( 5, 0, 0, 5 ) );
bord.setTop ( menuBar );
Menu ( stage );
Leitura ( );
vbox.getChildren ( ).addAll ( bord, s1 );
stage.setScene ( scene );
stage.show ( );
}
//
/////////////////////////////////////////////////////////////////////////
public static void main ( String [ ] args ) {
launch ( args );
}
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.