hi,
ich habe als übung mal einen sehr einfachen texteditor geschrieben. ich möchte nun gerne von euch ein paar verbesserungsvorschläge und tipps erhalten (z.b. wie ich den code auslagern könnte und das ganze übersichtlicher machen kann oder das mit dem menü und der toolbar vereinfachen könnte). außerdem habe ich noch eine frage zu copy und paste. wie bekomme ich es hin, nur den ausgwählten text in einer jtextarea anzusprechen?
hier mal mein sourcecode:
danke schonmal.
ich habe als übung mal einen sehr einfachen texteditor geschrieben. ich möchte nun gerne von euch ein paar verbesserungsvorschläge und tipps erhalten (z.b. wie ich den code auslagern könnte und das ganze übersichtlicher machen kann oder das mit dem menü und der toolbar vereinfachen könnte). außerdem habe ich noch eine frage zu copy und paste. wie bekomme ich es hin, nur den ausgwählten text in einer jtextarea anzusprechen?
hier mal mein sourcecode:
Code:
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class MainFrame extends JFrame
{
private JLabel statusLabel;
private JMenu fileMenu;
private JMenu editMenu;
private JMenu helpMenu;
private JMenuBar menuBar;
private JMenuItem newAct;
private JMenuItem openAct;
private JMenuItem saveAct;
private JMenuItem saveAsAct;
private JMenuItem quitAct;
private JMenuItem cutAct;
private JMenuItem copyAct;
private JMenuItem pasteAct;
private JMenuItem aboutAct;
private JScrollPane scrollPane;
private JTextArea textArea;
public MainFrame()
{
setTitle("Unbenannt - jEdit-Lite");
setSize(450, 350);
Toolkit tool = this.getToolkit();
Image image = tool.getImage("images/txt.png");
setIconImage(image);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
createMenus();
textArea = new JTextArea();
scrollPane = new JScrollPane(textArea);
statusLabel = new JLabel();
statusLabel.setText("Bereit");
add(createToolBar(), BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
add(statusLabel, BorderLayout.SOUTH);
setVisible(true);
}
private void createMenus()
{
menuBar = new JMenuBar();
// file-menu
fileMenu = new JMenu("Datei");
fileMenu.setMnemonic(KeyEvent.VK_D);
newAct = new JMenuItem("Neu", new ImageIcon("images/new.png"));
newAct.setMnemonic(KeyEvent.VK_N);
newAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
newAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
newFile();
}
});
fileMenu.add(newAct);
fileMenu.addSeparator();
openAct = new JMenuItem("Öffnen", new ImageIcon("images/open.png"));
openAct.setMnemonic(KeyEvent.VK_F);
openAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
openAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
open();
}
});
fileMenu.add(openAct);
fileMenu.addSeparator();
saveAct = new JMenuItem("Speichern", new ImageIcon("images/save.png"));
saveAct.setMnemonic(KeyEvent.VK_P);
saveAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
saveAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Speichern");
}
});
fileMenu.add(saveAct);
saveAsAct = new JMenuItem("Speichern unter ...", new ImageIcon("images/saveas.png"));
saveAsAct.setMnemonic(KeyEvent.VK_U);
saveAsAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveAs();
}
});
fileMenu.add(saveAsAct);
fileMenu.addSeparator();
quitAct = new JMenuItem("Beenden", new ImageIcon("images/exit.png"));
quitAct.setMnemonic(KeyEvent.VK_E);
quitAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK));
quitAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setVisible(false);
dispose();
System.exit(0);
}
});
fileMenu.add(quitAct);
menuBar.add(fileMenu);
// edit-menu
editMenu = new JMenu("Bearbeiten");
editMenu.setMnemonic(KeyEvent.VK_B);
cutAct = new JMenuItem("Ausschneiden", new ImageIcon("images/cut.png"));
cutAct.setMnemonic(KeyEvent.VK_A);
cutAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
cutAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cut();
}
});
editMenu.add(cutAct);
copyAct = new JMenuItem("Kopieren", new ImageIcon("images/copy.png"));
copyAct.setMnemonic(KeyEvent.VK_K);
copyAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
copyAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copy();
}
});
editMenu.add(copyAct);
pasteAct = new JMenuItem("Einfügen", new ImageIcon("images/paste.png"));
pasteAct.setMnemonic(KeyEvent.VK_F);
pasteAct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
pasteAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
paste();
}
});
editMenu.add(pasteAct);
menuBar.add(editMenu);
// help-menu
helpMenu = new JMenu("Hilfe");
helpMenu.setMnemonic(KeyEvent.VK_H);
aboutAct = new JMenuItem("Über", new ImageIcon("images/about.png"));
aboutAct.setMnemonic(KeyEvent.VK_B);
aboutAct.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
about();
}
});
helpMenu.add(aboutAct);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
}
private JToolBar createToolBar()
{
JToolBar toolBar = new JToolBar("Tool bar");
JButton newButton = new JButton(new ImageIcon("images/new.png"));
newButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
newFile();
}
});
toolBar.add(newButton);
JButton openButton = new JButton(new ImageIcon("images/open.png"));
openButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
open();
}
});
toolBar.add(openButton);
toolBar.addSeparator();
JButton saveButton = new JButton(new ImageIcon("images/save.png"));
saveButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Speichern");
}
});
toolBar.add(saveButton);
JButton saveAsButton = new JButton(new ImageIcon("images/saveas.png"));
saveAsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveAs();
}
});
toolBar.add(saveAsButton);
toolBar.addSeparator();
JButton cutButton = new JButton(new ImageIcon("images/cut.png"));
cutButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cut();
}
});
toolBar.add(cutButton);
JButton copyButton = new JButton(new ImageIcon("images/copy.png"));
copyButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copy();
}
});
toolBar.add(copyButton);
JButton pasteButton = new JButton(new ImageIcon("images/paste.png"));
pasteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
paste();
}
});
toolBar.add(pasteButton);
return toolBar;
}
private void newFile()
{
textArea.setText("");
statusLabel.setText("Bereit");
setTitle("Unbenannt - jEdit-Lite");
}
private void open()
{
File file;
JFileChooser fileChooser = new JFileChooser(".");
// Titel des Dialogs
fileChooser.setDialogTitle("Öffnen");
// Wenn OK gedrueckt wurde, fuehre aus...
int ret = fileChooser.showOpenDialog(this);
if(ret == JFileChooser.APPROVE_OPTION)
{
// der OK-Button des FileChooser-Dialogs wurde gedrueckt
file = fileChooser.getSelectedFile();
try
{
BufferedReader reader = new BufferedReader(new FileReader(file));
String text = "";
while((text = reader.readLine()) != null)
{
textArea.append(text + System.getProperty("line.separator"));
}
reader.close();
statusLabel.setText(file.getName() + " erfolgreich geöffnet");
setTitle(file.getName() + " - jEdit-Lite");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
private void saveAs()
{
File file;
JFileChooser fileChooser = new JFileChooser(".");
// Titel des Dialogs
fileChooser.setDialogTitle("Speichern unter ...");
// Wenn OK gedrueckt wurde, fuehre aus...
int ret = fileChooser.showSaveDialog(this);
if(ret == JFileChooser.APPROVE_OPTION)
{
// der OK-Button des FileChooser-Dialogs wurde gedrueckt
file = fileChooser.getSelectedFile();
try
{
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
String text = textArea.getText();
writer.write(text);
writer.close();
statusLabel.setText(file.getName() + " erfolgreich gespeichert");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
private void cut()
{
copy();
textArea.setText("");
}
private void copy()
{
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
String text = textArea.getText();
StringSelection contents = new StringSelection(text);
cb.setContents(contents, null);
}
private void paste()
{
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable content = cb.getContents(this);
try
{
String text = (String)content.getTransferData(DataFlavor.stringFlavor);
textArea.setText(text);
}
catch(Throwable e)
{
e.printStackTrace();
}
}
private void about()
{
JOptionPane.showMessageDialog(this, "jEdit-Lite 0.1");
}
public static void main(String[] args)
{
new MainFrame();
}
}
danke schonmal.