Hola Puedes crearme una aplicacion block de notas con java, la aplicacion debe ser capaz de realizar las funcionalidaes basicas abrir archivos, guardar e imprimir, asi como tambien las opciones de deshacer y rehacer, tambien debe dar la posibilidad de tener multiples pestañas, asi como de hacer zoom, cambiar el estilo, color y tamaño de la letra, el diseño debe ser moderno y atractivo
¡Claro! A continuación, te proporcionaré un ejemplo básico de una aplicación de bloc de notas en Java utilizando Swing. Esta aplicación incluirá las funcionalidades que mencionaste: abrir archivos, guardar, imprimir, deshacer, rehacer, múltiples pestañas, zoom, y opciones para cambiar el estilo, color y tamaño de la letra.
Asegúrate de tener instalado Java y un IDE como IntelliJ IDEA o Eclipse para compilar y ejecutar el código.
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.*;
import java.util.Stack;
public class NotepadApp extends JFrame {
private JTabbedPane tabbedPane;
private Stack<String> undoStack;
private Stack<String> redoStack;
public NotepadApp() {
setTitle("Bloc de Notas");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
tabbedPane = new JTabbedPane();
add(tabbedPane, BorderLayout.CENTER);
undoStack = new Stack<>();
redoStack = new Stack<>();
createMenuBar();
createNewTab();
setVisible(true);
}
private void createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("Archivo");
fileMenu.setMnemonic(KeyEvent.VK_A);
menuBar.add(fileMenu);
JMenuItem newItem = new JMenuItem("Nuevo");
newItem.addActionListener(e -> createNewTab());
fileMenu.add(newItem);
JMenuItem openItem = new JMenuItem("Abrir");
openItem.addActionListener(e -> openFile());
fileMenu.add(openItem);
JMenuItem saveItem = new JMenuItem("Guardar");
saveItem.addActionListener(e -> saveFile());
fileMenu.add(saveItem);
JMenuItem printItem = new JMenuItem("Imprimir");
printItem.addActionListener(e -> printFile());
fileMenu.add(printItem);
JMenuItem exitItem = new JMenuItem("Salir");
exitItem.addActionListener(e -> System.exit(0));
fileMenu.add(exitItem);
JMenu editMenu = new JMenu("Editar");
editMenu.setMnemonic(KeyEvent.VK_E);
menuBar.add(editMenu);
JMenuItem undoItem = new JMenuItem("Deshacer");
undoItem.addActionListener(e -> undo());
editMenu.add(undoItem);
JMenuItem redoItem = new JMenuItem("Rehacer");
redoItem.addActionListener(e -> redo());
editMenu.add(redoItem);
JMenu formatMenu = new JMenu("Formato");
formatMenu.setMnemonic(KeyEvent.VK_F);
menuBar.add(formatMenu);
JMenuItem fontItem = new JMenuItem("Cambiar Fuente");
fontItem.addActionListener(e -> changeFont());
formatMenu.add(fontItem);
setJMenuBar(menuBar);
}
private void createNewTab() {
JTextPane textPane = new JTextPane();
textPane.setContentType("text/plain");
textPane.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
undoStack.push(textPane.getText());
redoStack.clear();
}
});
JScrollPane scrollPane = new JScrollPane(textPane);
tabbedPane.addTab("Nueva Pestaña", scrollPane);
}
private void openFile() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Archivos de texto", "txt"));
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
JTextPane textPane = new JTextPane();
textPane.setContentType("text/plain");
textPane.read(reader, null);
JScrollPane scrollPane = new JScrollPane(textPane);
tabbedPane.addTab(file.getName(), scrollPane);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void saveFile() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Archivos de texto", "txt"));
if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
JTextPane textPane = (JTextPane) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getView();
textPane.write(writer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void printFile() {
JTextPane textPane = (JTextPane) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getView();
try {
textPane.print();
} catch (Exception e) {
e.printStackTrace();
}
}
private void undo() {
if (!undoStack.isEmpty()) {
String lastText = undoStack.pop();
redoStack.push(lastText);
JTextPane textPane = (JTextPane) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getView();
textPane.setText(lastText);
}
}
private void redo() {
if (!redoStack.isEmpty()) {
String lastText = redoStack.pop();
undoStack.push(lastText);
JTextPane textPane = (JTextPane) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getView();
textPane.setText(lastText);
}
}
private void changeFont() {
JTextPane textPane = (JTextPane) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getView();
Font currentFont = textPane.getFont();
Font newFont = JFontChooser.showDialog(this, "Seleccionar Fuente", currentFont);
if (newFont != null) {
textPane.setFont(newFont);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(NotepadApp::new);
}
}
class JFontChooser extends JDialog {
private Font selectedFont;
public static Font showDialog(Component parent, String title, Font initialFont) {
JFontChooser fontChooser = new JFontChooser(parent, title, initialFont);
fontChooser.setVisible(true);
return fontChooser.selectedFont;
}
private JFontChooser(Component parent, String title, Font initialFont) {
setTitle(title);
setModal(true);
setSize(400, 300);
setLocationRelativeTo(parent);
setLayout(new BorderLayout());
JList<String> fontList = new JList<>(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
fontList.setSelectedValue(initialFont.getFontName(), true);
add(new JScrollPane(fontList), BorderLayout.CENTER);
JButton okButton = new JButton("Aceptar");
okButton.addActionListener(e -> {
String selectedFontName = fontList.getSelectedValue();
int selectedSize = Integer.parseInt(JOptionPane.showInputDialog(this, "Tamaño de fuente:", initialFont.getSize()));
selectedFont = new Font(selectedFontName, Font.PLAIN, selectedSize);
dispose();
});
add(okButton, BorderLayout.SOUTH);
}
}
JFrame
, JTabbedPane
, y JTextPane
para crear la interfaz de usuario.Stack
) para manejar las operaciones de deshacer y rehacer.NotepadApp.java
.¡Espero que esto te ayude a crear tu aplicación de bloc de notas! Si tienes más preguntas o necesitas más funcionalidades, no dudes en preguntar.