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
Publicar un comentario