import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; import javax.swing.undo.*; import java.util.*; import java.io.*; public class SwingEditori extends JFrame { private JTextArea teksti_alue = new JTextArea(50, 80); private Document dokumentti = teksti_alue.getDocument(); private UndoManager peruutus_manageri = new UndoManager(); public SwingEditori() { // ladataan tiedosto Testi.txt dokumenttiin. try { new DefaultEditorKit().read(new FileReader("Testi.txt"), dokumentti, 0); } catch(Exception e) { e.printStackTrace(); } JPanel paneeli = new JPanel(); paneeli.setLayout(new BorderLayout()); paneeli.add(new JScrollPane(teksti_alue), BorderLayout.CENTER); // textArea.getDocument().addDocumentListener(DokumentinKuuntelija()); this.setJMenuBar(luo_valikko()); this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); this.addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent e) { System.exit(0); } }); // Lisätään UndoableEditListener-kuuntelija, joka lisää // editointitapahtuman UndoManager-luokan olioon. dokumentti.addUndoableEditListener( new UndoableEditListener() { public void undoableEditHappened(UndoableEditEvent e) { peruutus_manageri.addEdit(e.getEdit()); } } ); // Asetetaan tekstialueen väri teksti_alue.setSelectedTextColor(Color.red); teksti_alue.setSelectionColor(Color.gray); this.setTitle("Java/Swing -tekstieditori"); this.getContentPane().add(paneeli, BorderLayout.CENTER); this.setSize(500, 400); this.setVisible(true); } // Luo valikon public JMenuBar luo_valikko() { JMenuBar menu_palkki = new JMenuBar(); JMenu valikko1 = new JMenu("Leikepöytä"); valikko1.add(new LeikkausToiminto()); valikko1.add(new LiimausToiminto()); valikko1.add(new KopiointiToiminto()); valikko1.addSeparator(); valikko1.add(new DefaultEditorKit.CutAction()); valikko1.add(new DefaultEditorKit.CopyAction()); valikko1.add(new DefaultEditorKit.PasteAction()); valikko1.addSeparator(); valikko1.add(new OhjelmanLopetus()); valikko1.addSeparator(); JMenu valikko2 = new JMenu("Toiminnot"); valikko2.add(new PeruutusToiminto()); menu_palkki.add(valikko1); menu_palkki.add(valikko2); return menu_palkki; } class LeikkausToiminto extends TextAction { public LeikkausToiminto() { super("Leikkaa"); } public void actionPerformed(ActionEvent e) { JTextComponent kohde = getTextComponent(e); if (kohde != null) kohde.cut(); } } class LiimausToiminto extends TextAction { public LiimausToiminto() { super("Liimaa"); } public void actionPerformed(ActionEvent e) { JTextComponent kohde = getTextComponent(e); if (kohde != null) kohde.paste(); } } class KopiointiToiminto extends TextAction { public KopiointiToiminto() { super("Kopioi"); } public void actionPerformed(ActionEvent e) { JTextComponent kohde = getTextComponent(e); if (kohde != null) kohde.copy(); } } class PeruutusToiminto extends AbstractAction { public PeruutusToiminto() { super("Peruuta"); } public void actionPerformed(ActionEvent e) { if (peruutus_manageri.canUndo()) peruutus_manageri.undo(); } } class OhjelmanLopetus extends AbstractAction { public OhjelmanLopetus() { super("Lopeta"); } public void actionPerformed(ActionEvent e) { if (JOptionPane.showConfirmDialog(SwingEditori.this, "Tallennetaanko muutokset") == JOptionPane.YES_OPTION) { try { new DefaultEditorKit().write(new FileWriter("Testi.txt"), dokumentti, 0, dokumentti.getLength()); } catch(Exception p) { return; } } System.exit(0); } } }