Ir al contenido principal

Quiéres estos diseños en tu ropa o en diferentes productos?

Publicidad

Editor de texto plano con JavaFX

 

 

Hola a todos!, hoy les presento una nueva pequeña aplicación desarrollada con JavaFX para aquellos interesados en aprender sobre Java y su nueva interfaz gráfica.

Con este pequeño código que les presentaré hoy podrán leer y escribir archivos de texto plano. No esta demás recordarles que todas mis aplicaciones aunque están completamente funcionales, no son a prueba de errores y mucho menos evitan errores humanos, así que si quieren probarlo tomen las precauciones que el caso requiera y así evitan perder información importante para ustedes.


Bien veamos el código de hoy.


PlainTextUI.java
 

public class PlainTextUI extends Application{
    private Stage stage;
    private TextArea textArea;
    private String path;
    private String fileName;
    private int option;
    private MenuBar menuBar;
    private BorderPane root;
    public static void main(String[] args) {
        launch(args);
   }

   public void start(Stage primaryStage) throws Exception {
       option = 0;
       path = null;
       fileName = null;
       stage = primaryStage;
       root = new BorderPane();
       textArea = new TextArea();
       textArea.getStyleClass().add("textArea");
       textArea.setWrapText(true);
       Font font = null;
       List<String> families = Font.getFamilies();
       if(families.contains("Monospaced")){
         font = new Font("Monospaced Regular",12); }
       else{
         if(families.contains("FreeMono"))
             font = new Font("FreeMono Regular",12);
         else
            font = Font.getDefault();
       }
       textArea.setFont(font);
       menuBar = new MenuBar();
       menuBar.getStyleClass().add("menuBar");
       Menu menuFile = new Menu("Archivo");
       menuFile.getStyleClass().add("menu");
       MenuItem saveFile = new MenuItem("Guardar");
       MenuItem saveAsFile = new MenuItem("Guardar Como");
       MenuItem openFile = new MenuItem("Abrir");
       MenuItem newFile = new MenuItem("Nuevo");
       MenuItem closeFile = new MenuItem("Cerrar");
       saveFile.getStyleClass().add("menuItem");
       saveAsFile.getStyleClass().add("menuItem");
       openFile.getStyleClass().add("menuItem");
       newFile.getStyleClass().add("menuItem");
       closeFile.getStyleClass().add("menuItem");
       menuFile.getItems().add(newFile);
       menuFile.getItems().add(openFile);
       menuFile.getItems().add(saveFile);
       menuFile.getItems().add(saveAsFile);
       menuFile.getItems().add(closeFile);
       //OPEN FILE ACTION
       openFile.setOnAction(new EventHandler<ActionEvent>(){
           public void handle(ActionEvent event) {
               option = 1;
               if(!textArea.getText().isEmpty()){
                   askOnNewOrExit(0);
               }
               else{
                   openFile();
               }
           }
        });
        //SAVE FILE ACTION
        saveFile.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event) {
                saveFile("Guardar");
            }});
        //SAVE AS FILE ACTION
        saveAsFile.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event) {
                saveAsFile("Guardar Como");
            }});

        //NEW FILE ACTION
        newFile.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event) {
                option = 2;
                if (!textArea.getText().isEmpty()){
                    askOnNewOrExit(1);
                }
                else{
                    textArea.setText("");
                    path = null;
                    fileName = null;
                }
            }});

        //CLOSE FILE ACTION
        closeFile.setOnAction(new EventHandler<ActionEvent>(){
            public void handle(ActionEvent event) {
                option = 2;
                if(!textArea.getText().isEmpty()){
                    askOnNewOrExit(0);
                }
            }});
        menuBar.getMenus().add(menuFile);
        textArea.wrapTextProperty();
        root.setTop(menuBar);
        root.setCenter(textArea);
        Scene scene = new Scene(root,640,480);
        stage.setScene(scene);
        stage.setTitle("NotePad - JavaFX");
        stage.show();
    }
   
    private void openFile(){
        FileChooser chooser = new FileChooser();
        chooser.setTitle("Selecciona un archivo de texto");
        chooser.setInitialDirectory(new File(System.getProperty("user.home")));
        File selectedFile = chooser.showOpenDialog(stage);
        if(selectedFile != null){
            path = selectedFile.getParent();
            fileName = selectedFile.getName();
            textArea.setText(read(selectedFile));
        }
        selectedFile = null;
    }

    private void askOnNewOrExit(int op){

        if(!textArea.getText().isEmpty()){
            menuBar.setVisible(false);
            textArea.setEditable(false);
            Label text = new Label("Estas Seguro?");
            text.setAlignment(Pos.CENTER);
            VBox box = new VBox();
            HBox buttonBox = new HBox();
            buttonBox.setAlignment(Pos.CENTER);
            buttonBox.setSpacing(10);
            box.setPrefSize(250, 100);
            box.setBackground(new Background(new BackgroundFill(Color.GAINSBORO,new CornerRadii(0),new Insets(0,0,0,0))));
            box.setAlignment(Pos.CENTER);
            box.setSpacing(10);
            Button yesButton = new Button("Guardar");
            
            yesButton.setOnAction(new EventHandler<ActionEvent>(){
                public void handle(ActionEvent event) {
                    textArea.setEditable(true);
                    saveFile("Guardar");
                    if(option == 2)
                        if(path != null)
                            textArea.setText("");
                            option = 0;
                            root.setBottom(null);
                            menuBar.setVisible(true);
                        }
                });
            
            Button noButton = null;
            if(op == 0)
                noButton = new Button("Cerrar");
            else
                noButton = new Button("Nuevo");
                    
            noButton.setOnAction(new EventHandler<ActionEvent>(){
                public void handle(ActionEvent event) {
                    textArea.setEditable(true);
                    textArea.setText("");
                    if(option == 1){
                        openFile();
                        option = 0;
                    }
                    root.setBottom(null);
                    menuBar.setVisible(true);
                    path = null;
                    fileName = null;
                }});
            
            buttonBox.getChildren().add(yesButton);
            buttonBox.getChildren().add(noButton);
            box.getChildren().add(text);
            box.getChildren().add(buttonBox);
            root.setBottom(box);
        }
    }

    private void saveAsFile(String title){
        FileChooser chooser = new FileChooser();
        if(fileName != null)
            chooser.setInitialFileName(fileName);
            chooser.setTitle(title);
        if(path == null)
            chooser.setInitialDirectory(new File(System.getProperty("user.home")));
        else
            chooser.setInitialDirectory(new File(path));
            File selectedFile = chooser.showSaveDialog(stage);
        if(selectedFile != null){
            path = selectedFile.getParent();
            fileName = selectedFile.getName(); write(selectedFile,textArea.getText()); } selectedFile = null;
        }
    
    private void saveFile(String title){
        if(path == null){
            saveAsFile(title);
        }
        else
            write(new File(path+System.getProperty("file.separator")+fileName),textArea.getText());
    }
        
    private static String read(File file){
        String text = "";
        BufferedReader buffer = null;
        try {
            buffer = new BufferedReader(new FileReader(file));
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
        StringBuffer sb = new StringBuffer();
        try {
            while((text = buffer.readLine()) != null){
                sb.append(text+System.getProperty("line.separator"));
            }
        }
        catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            buffer.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
    
    private static boolean write(File f,String str){
        BufferedWriter buffer = null;
        try {
            FileWriter writer = new FileWriter(f);
            writer.write(str);
            buffer = new BufferedWriter(writer);
        }
        catch (IOException e){
            e.printStackTrace();
        }
        try {
            buffer.close();
        }
        catch (IOException e){
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

Ya tenemos el código completo, como ven es solo un archivo en el cual todo esta contenido y es la clase principal, no se si realmente hay algo que explicar aquí, así que les dejo el código para el que quiera probarlo.

Dejen sus comentarios si les pareció interesante o hay algún error o si piensan que pudo haber sido desarrollado de otra manera, les dejo una imagen de la aplicación y eso es todo hasta la próxima.




Comentarios