diff --git a/mavenproject1/pom.xml b/mavenproject1/pom.xml new file mode 100644 index 0000000..7de8c6e --- /dev/null +++ b/mavenproject1/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + com.mycompany + mavenproject1 + 1.0-SNAPSHOT + jar + + UTF-8 + 20 + 20 + com.mycompany.mavenproject1.Mavenproject1 + + \ No newline at end of file diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónAbrirArchivo.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónAbrirArchivo.java new file mode 100644 index 0000000..fa0977b --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónAbrirArchivo.java @@ -0,0 +1,121 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Controlador; + +import com.mycompany.editorascii.Vista.Editor; +import com.mycompany.editorascii.Vista.Menú; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Arrays; +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileNameExtensionFilter; + +/** + * + * @author drdav + */ +public class GestiónBotónAbrirArchivo implements ActionListener{ + + private Menú menu; + + public GestiónBotónAbrirArchivo(Menú menu){ + menu = menu; + } + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + + FileNameExtensionFilter filter = new FileNameExtensionFilter("TXT", "txt"); + fc.setFileFilter(filter); + + int seleccion = fc.showOpenDialog(menu); + + if(seleccion == JFileChooser.APPROVE_OPTION){ + File fichero = fc.getSelectedFile(); + try (FileReader fr = new FileReader(fichero)){ + String texto = ""; + int valor = fr.read(); + while(valor != -1){ + texto = texto + (char) valor; + valor = fr.read(); + } + + System.out.print(texto); + fr.close(); + //abrirEditor(texto); + char[][]matriz = textoAMatriz(texto); + int largo = matriz.length; + int ancho = (largo == 0) ? 0 : matriz[0].length; + Editor editor = new Editor(ancho,largo,matriz); + menu.dispose(); + }catch(IOException ex){ + System.err.println(ex); + } + } + } + + public void abrirEditor(String texto){ + System.out.print(texto); + int x = 0; + int y = 0; + int i = 0; + int maxX = 0; + char car = texto.charAt(i); + while(i != texto.length()-1 ){ + x++; + if(car == '\n'){ + y++; + if(x > maxX){ + maxX = x; + } + x = 0; + } + i++; + car = texto.charAt(i); + } + i = 0; + char[][] matriz = new char[x][y]; + for(int j = 0; j < x; j++){ + for(int w = 0; w < y; w++){ + matriz[j][w]= texto.charAt(i); + i++; + } + } + + Editor editor = new Editor(x,y,matriz); + } + + public static char[][] textoAMatriz(String texto) { + // Dividir el texto en líneas + String[] lineas = texto.split("\n"); + + // Encontrar la longitud máxima de línea + int longitudMaxima = 0; + for (String linea : lineas) { + longitudMaxima = Math.max(longitudMaxima, linea.length()); + } + + // Crear la matriz de caracteres + char[][] matriz = new char[lineas.length][longitudMaxima]; + + // Llenar la matriz con los caracteres del texto + for (int i = 0; i < lineas.length; i++) { + Arrays.fill(matriz[i], ' '); // Llenar con espacios en blanco por defecto + char[] caracteresLinea = lineas[i].toCharArray(); + System.arraycopy(caracteresLinea, 0, matriz[i], 0, caracteresLinea.length); + } + + for (char[] fila : matriz) { + System.out.println(Arrays.toString(fila)); + } + + return matriz; + } + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónGuardarDibujo.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónGuardarDibujo.java new file mode 100644 index 0000000..f43cab5 --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónBotónGuardarDibujo.java @@ -0,0 +1,49 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Controlador; + +import com.mycompany.editorascii.Vista.Editor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileNameExtensionFilter; + +/** + * + * @author drdav + */ +public class GestiónBotónGuardarDibujo implements ActionListener{ + + private Editor editor; + + public GestiónBotónGuardarDibujo(Editor parEditor){ + editor = parEditor; + } + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + + FileNameExtensionFilter filter = new FileNameExtensionFilter("TXT", "txt"); + fc.setFileFilter(filter); + fc.setApproveButtonText("Guardar"); + fc.showSaveDialog(null); + + File archivo = new File(fc.getSelectedFile()+".txt"); + + try{ + BufferedWriter salida = new BufferedWriter(new FileWriter(archivo)); + salida.write(editor.obtenerTextoMatriz()); + salida.close(); + }catch(IOException ex){ + System.err.println(ex); + } + } + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónTecladoEscribirCaracter.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónTecladoEscribirCaracter.java new file mode 100644 index 0000000..abea5ea --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Controlador/GestiónTecladoEscribirCaracter.java @@ -0,0 +1,51 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Controlador; + +import com.mycompany.editorascii.Vista.Editor; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +/** + * + * @author drdav + */ +public class GestiónTecladoEscribirCaracter implements KeyListener{ + + private Editor editor; + int x; + int y; + + public GestiónTecladoEscribirCaracter(Editor parEditor, int parX, int parY){ + editor = parEditor; + x = parX; + y = parY; + } + + @Override + public void keyTyped(KeyEvent e) { + + System.out.println(x + " " + y+ editor.obtenerTextoCelda(x, y)); + + } + + @Override + public void keyPressed(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent e) { + recortarTexto(); + } + + public void recortarTexto(){ + String textoCelda = editor.obtenerTextoCelda(x, y); + if(textoCelda.length() > 1){ + editor.insertarTextoCelda(x, y, String.valueOf(textoCelda.charAt(textoCelda.length()-1)) ); + } + } + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Modelo/Dibujo.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Modelo/Dibujo.java new file mode 100644 index 0000000..5a4c81a --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Modelo/Dibujo.java @@ -0,0 +1,66 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Modelo; + +/** + * + * @author drdav + */ +public class Dibujo { + private int alto; + private int ancho; + private char[][]lienzo = new char[ancho][alto]; + + public Dibujo(int alto, int ancho){ + this.alto = alto; + this.ancho = ancho; + } + + public void insertarCaracter(int x, int y, char letra){ + lienzo[x][y] = letra; + } + + public void llenarLienzo(char dibujo[][]){ + lienzo = dibujo; + } + + public void limpiarLienzo(){ + for(int i = 0; i < ancho; i++){ + for(int j = 0; j < alto; j++){ + lienzo[i][j] = ' '; + } + } + } + + public char obtenerCaracterEn(int x, int y){ + return lienzo[x][y]; + } + + public int getAlto() { + return alto; + } + + public void setAlto(int alto) { + this.alto = alto; + } + + public int getAncho() { + return ancho; + } + + public void setAncho(int ancho) { + this.ancho = ancho; + } + + public char[][] getLienzo() { + return lienzo; + } + + public void setLienzo(char[][] lienzo) { + this.lienzo = lienzo; + } + + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Editor.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Editor.java new file mode 100644 index 0000000..d4c7548 --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Editor.java @@ -0,0 +1,221 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Vista; + +import com.mycompany.editorascii.Controlador.GestiónBotónGuardarDibujo; +import com.mycompany.editorascii.Controlador.GestiónTecladoEscribirCaracter; +import com.mycompany.editorascii.Modelo.Dibujo; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.HeadlessException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +/** + * + * @author drdav + */ +public class Editor extends JFrame{ + + JPanel pEditor = new JPanel(new CardLayout()); + JTextArea taEditor = new JTextArea(); + + JPanel pBotonesDer = new JPanel(new GridBagLayout()); + JButton bGuardar = new JButton("Guardar"); + JButton bBorrar = new JButton("Borrar"); + + JPanel pBotonesSup = new JPanel(new GridBagLayout()); + JButton bRegresar = new JButton("Regresar"); + + JPanel pMatriz = new JPanel(new GridBagLayout()); + + Dibujo dibujo; + + int x; + int y; + + JTextField [][]celdas; + + public Editor(int parX, int parY) throws HeadlessException { + super("Editar"); + x = parX; + y = parY; + celdas = new JTextField[x][y]; + dibujo = new Dibujo(x,y); + + this.setLayout(new BorderLayout()); + this.agregarComponentes(); + this.agregarListeners(); + + //this.llenarTextarea(x, y); + this.crearCeldas(x, y); + this.limpiarCeldas(); + + iniciar(); + } + + public Editor(int parX, int parY, char parDibujo[][]){ + super("Editar"); + + x = parX; + y = parY; + celdas = new JTextField[x][y]; + dibujo = new Dibujo(x,y); + dibujo.llenarLienzo(parDibujo); + + this.setLayout(new BorderLayout()); + this.agregarComponentes(); + this.agregarListeners(); + + //this.llenarTextarea(x, y); + this.crearCeldas(x, y); + llenarCeldas(); + + iniciar(); + } + + public void llenarCeldas(){ + for (int i = 0; i < x; i++){ + for(int j = 0; j < y; j++){ + celdas[i][j].setText( String.valueOf(dibujo.obtenerCaracterEn(i, j)) ); + } + } + } + + + public void limpiarCeldas(){ + for (int i = 0; i < x; i++){ + for(int j = 0; j < y; j++){ + celdas[i][j].setText( ""); + } + } + } + + public String obtenerTextoMatriz(){ + String texto = ""; + + for (int i = 0; i < x; i++){ + for(int j = 0; j < y; j++){ + if("".equals(celdas[i][j].getText())){ + texto = texto + " "; + }else{ + texto = texto + celdas[i][j].getText(); + } + + } + texto = texto + '\n'; + } + + return texto; + } + + public void agregarComponentes(){ + pEditor.add(this.taEditor); + + GridBagConstraints con = new GridBagConstraints(); + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + pBotonesDer.add(this.bGuardar,con); + + con.gridx = 0; + con.gridy = 1; + con.gridheight = 1; + con.gridwidth = 1; + pBotonesDer.add(this.bBorrar,con); + + con.gridx = 0; + con.gridy = 1; + con.gridheight = 1; + con.gridwidth = 1; + pBotonesSup.add(this.bRegresar,con); + + this.add(this.pEditor,BorderLayout.CENTER); + this.add(this.pBotonesDer,BorderLayout.EAST); + this.add(this.pBotonesSup,BorderLayout.NORTH); + } + + public void agregarListeners(){ + bRegresar.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + Menú menu = new Menú(); + dispose(); + } + }); + + this.bGuardar.addActionListener(new GestiónBotónGuardarDibujo(this)); + + this.bBorrar.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + limpiarCeldas(); + } + }); + } + + public void crearCeldas(int parX, int parY){ + + + GridBagConstraints con = new GridBagConstraints(); + + JTextField tfAux; + for(int i = 0; i < parX; i++){ + for(int j = 0; j < parY; j ++){ + tfAux = new JTextField(""); + tfAux.setColumns(1); + tfAux.addKeyListener(new GestiónTecladoEscribirCaracter(this,i,j)); + con.gridx = j; + con.gridy = i; + con.gridheight = 1; + con.gridwidth = 1; + System.out.println(i+" "+j+ " "+celdas.length); + celdas[i][j] = tfAux; + pMatriz.add(celdas[i][j],con); + } + } + + this.add(this.pMatriz,BorderLayout.CENTER); + } + + public String obtenerTextoCelda(int posX, int posY){ + return celdas[posX][posY].getText(); + } + + public void insertarTextoCelda(int posX, int posY, String texto){ + celdas[posX][posY].setText(texto); + } + + public void llenarTextarea(int parX, int parY){ + + this.add(this.pEditor,BorderLayout.CENTER); + + taEditor.setBounds(0, 0, parX, parY); + + for(int i = 0; i < parY; i++){ + for(int j = 0; j < parX; j ++){ + this.taEditor.append("X"); + } + this.taEditor.append("\n"); + } + } + + public void iniciar(){ + this.setBounds(100,100,700,700); + //this.setResizable(false); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Menú.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Menú.java new file mode 100644 index 0000000..e424435 --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/Menú.java @@ -0,0 +1,69 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Vista; + +import com.mycompany.editorascii.Controlador.GestiónBotónAbrirArchivo; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFrame; + +/** + * + * @author drdav + */ +public class Menú extends JFrame{ + + JButton bNuevoDibujo = new JButton("Nuevo Dibujo"); + JButton bAbrirDibujo = new JButton("Abrir Dibujo"); + + public Menú() { + super("Menú"); + this.setLayout(new GridBagLayout()); + agregarComponentes(); + this.iniciar(); + } + + public void agregarComponentes(){ + GridBagConstraints con = new GridBagConstraints(); + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + this.add(this.bNuevoDibujo,con); + + con.gridx = 0; + con.gridy = 2; + con.gridheight = 1; + con.gridwidth = 1; + this.add(this.bAbrirDibujo,con); + + this.agregarListeners(); + } + + public void agregarListeners(){ + JFrame aux = this; + bNuevoDibujo.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + VentanaTamaño ventanaTamaño = new VentanaTamaño(aux); + } + }); + + this.bAbrirDibujo.addActionListener(new GestiónBotónAbrirArchivo(this)); + } + + public void iniciar(){ + this.setBounds(100,100,300,300); + this.setResizable(false); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} diff --git a/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/VentanaTamaño.java b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/VentanaTamaño.java new file mode 100644 index 0000000..eb7011d --- /dev/null +++ b/mavenproject1/src/main/java/com/mycompany/editorascii/Vista/VentanaTamaño.java @@ -0,0 +1,162 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.mycompany.editorascii.Vista; + +import java.awt.BorderLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.HeadlessException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +/** + * + * @author drdav + */ +public class VentanaTamaño extends JFrame{ + + JPanel pAlto = new JPanel(new GridBagLayout()); + JLabel lAlto = new JLabel("Alto:"); + JSpinner spAlto = new JSpinner(); + + JPanel pAncho = new JPanel(new GridBagLayout()); + JLabel lAncho = new JLabel("Ancho:"); + JSpinner spAncho = new JSpinner(); + + JPanel pBotones = new JPanel(new GridBagLayout()); + JButton bAceptar = new JButton("Aceptar"); + JButton bCancelar = new JButton("Cancelar"); + + JFrame ventanaJefe; + + public VentanaTamaño(JFrame parVentana) throws HeadlessException { + super("Seleccionar Tamaño"); + + ventanaJefe = parVentana; + + this.agregarComponentes(); + this.agregarListeners(); + + iniciar(); + } + + public void agregarComponentes(){ + GridBagConstraints con = new GridBagConstraints(); + this.setLayout(new GridBagLayout()); + + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + this.add(pAlto,con); + + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + pAlto.add(this.lAlto,con); + con.gridx = 0; + con.gridy = 1; + con.gridheight = 1; + con.gridwidth = 4; + pAlto.add(this.spAlto,con); + spAlto.setValue(4); + + con.gridx = 0; + con.gridy = 1; + con.gridheight = 1; + con.gridwidth = 1; + this.add(pAncho,con); + + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + pAncho.add(lAncho,con); + con.gridx = 0; + con.gridy = 1; + con.gridheight = 1; + con.gridwidth = 4; + pAncho.add(this.spAncho,con); + spAncho.setValue(4); + + con.gridx = 0; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + pBotones.add(this.bAceptar,con); + + con.gridx = 1; + con.gridy = 0; + con.gridheight = 1; + con.gridwidth = 1; + pBotones.add(this.bCancelar, con); + con.gridx = 0; + con.gridy = 2; + con.gridheight = 1; + con.gridwidth = 1; + this.add(this.pBotones,con); + } + + public void agregarListeners(){ + bAceptar.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + int x = Integer.valueOf(spAncho.getValue().toString()); + int y = Integer.valueOf(spAlto.getValue().toString()); + + Editor editor = new Editor(x,y); + ventanaJefe.dispose(); + dispose(); + } + }); + + bCancelar.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + spAlto.addChangeListener(new ChangeListener(){ + @Override + public void stateChanged(ChangeEvent e) { + if((Integer)spAlto.getValue() < 3){ + spAlto.setValue(3); + } + if((Integer)spAlto.getValue() > 30){ + spAlto.setValue(30); + } + } + }); + + spAncho.addChangeListener(new ChangeListener(){ + @Override + public void stateChanged(ChangeEvent e) { + if((Integer)spAncho.getValue() < 3){ + spAncho.setValue(3); + } + if((Integer)spAncho.getValue() > 30){ + spAncho.setValue(30); + } + } + }); + } + + public void iniciar(){ + this.setBounds(100,100,400,400); + this.setResizable(false); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +}