import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.plaf.metal.*;
import javax.swing.text.*;
/**
* Class untuk membuat text editor.
*
* @author Thomas Felix
* @version 1 Januari 2021
*/
public class TextEditor extends JFrame implements ActionListener
{
// Komponen text
JTextArea t;
// Frame
JFrame f;
// Konstruktor
TextEditor()
{
// Membuat frame aplikasi
f = new JFrame("Text Editor");
try
{
// Menggunakan metal look and feel
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
// Menggunakan tema Ocean
MetalLookAndFeel.setCurrentTheme(new OceanTheme());
}
catch (Exception e)
{
}
// Membuat text area
t = new JTextArea();
// Membuat menubar
JMenuBar mb = new JMenuBar();
// Membuat menu File di dalam menubar
JMenu m1 = new JMenu("File");
// Di dalam menu File terdapat beberapa menu item
JMenuItem mi1 = new JMenuItem("New");
JMenuItem mi2 = new JMenuItem("Open");
JMenuItem mi3 = new JMenuItem("Save");
JMenuItem mi4 = new JMenuItem("Print");
// Menambahkan action listener
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(this);
mi4.addActionListener(this);
// Menambahkan menu-menu item ke menu File
m1.add(mi1);
m1.add(mi2);
m1.add(mi3);
m1.add(mi4);
// Membuat menu Edit di dalam menubar
JMenu m2 = new JMenu("Edit");
// Di dalam menu Edit terdapat beberapa menu item
JMenuItem mi5 = new JMenuItem("Cut");
JMenuItem mi6 = new JMenuItem("Copy");
JMenuItem mi7 = new JMenuItem("Paste");
// Menambahkan action listener
mi5.addActionListener(this);
mi6.addActionListener(this);
mi7.addActionListener(this);
// Menambahkan menu-menu item ke menu Edit
m2.add(mi5);
m2.add(mi6);
m2.add(mi7);
// Membuat menu Close di dalam menubar
JMenuItem mc = new JMenuItem("Close");
// Menambahkan action listener
mc.addActionListener(this);
// Menambahkan menu File, Edit, Close ke menubar
mb.add(m1);
mb.add(m2);
mb.add(mc);
f.setJMenuBar(mb);
f.add(t);
f.setSize(550,550);
f.show();
// Teks akan berpindah ke baris berikutnya apabila mencapai batas text area
t.setLineWrap(true);
// Mengatur model penulisan kata apabila baris teks melampaui text area
t.setWrapStyleWord(true);
// Shortcut perintah menu
mi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); // New
mi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); // Open
mi3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); // Save
mi4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); // Print
mi5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK)); // Cut
mi6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); // Copy
mi7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK)); // Paste
}
// Jika perintah menu dijalankan oleh user
public void actionPerformed(ActionEvent e)
{
String s = e.getActionCommand();
if (s.equals("Cut"))
{
t.cut();
}
else if (s.equals("Copy"))
{
t.copy();
}
else if (s.equals("Paste"))
{
t.paste();
}
else if (s.equals("Save"))
{
// Membuat object class JFileChooser
JFileChooser j = new JFileChooser("f:");
// Menggunakan fungsi showsSaveDialog untuk menampilkan menu penyimpanan.
int r = j.showSaveDialog(null);
if (r == JFileChooser.APPROVE_OPTION)
{
// Mengatur label ke jalur directory yang telah dipilih
File fi = new File(j.getSelectedFile().getAbsolutePath());
try
{
// Membuat file writer
FileWriter wr = new FileWriter(fi, false);
// Membuat buffered writer untuk menulis
BufferedWriter w = new BufferedWriter(wr);
// Untuk menulis
w.write(t.getText());
w.flush();
w.close();
}
catch (Exception evt)
{
JOptionPane.showMessageDialog(f, evt.getMessage());
}
}
// Jika user batal melakukan perintah Save
else
{
JOptionPane.showMessageDialog(f, "User cancelled the operation.");
}
}
else if (s.equals("Print"))
{
try
{
// Print file
t.print();
}
catch (Exception evt)
{
JOptionPane.showMessageDialog(f, evt.getMessage());
}
}
else if (s.equals("Open"))
{
// Membuat object class JFileChooser
JFileChooser j = new JFileChooser("f:");
// Menggunakan fungsi showsSaveDialog untuk menampilkan men
int r = j.showOpenDialog(null);
// Jika user select sebuah file
if (r == JFileChooser.APPROVE_OPTION)
{
// Mengatur label ke jalur directory yang telah dipilih
File fi = new File(j.getSelectedFile().getAbsolutePath());
try
{
// String
String s1 = "", sl = "";
// File reader
FileReader fr = new FileReader(fi);
// Buffered reader
BufferedReader br = new BufferedReader(fr);
// Inisialisasi sl
sl = br.readLine();
// Ambil inputan dari file
while ((s1 = br.readLine()) != null)
{
sl = sl + "\\n" + s1;
}
// Mengatur text
t.setText(sl);
}
catch (Exception evt)
{
JOptionPane.showMessageDialog(f, evt.getMessage());
}
}
// Jika user batal melakukan perintah Open
else
{
JOptionPane.showMessageDialog(f, "User cancelled the operation.");
}
}
else if (s.equals("New"))
{
t.setText("");
}
else if (s.equals("Close"))
{
f.setVisible(false);
}
}
// Class main
public static void main(String args[])
{
TextEditor te = new TextEditor();
}
}