G
Guest
Gast
Erst mal ein Hallo an alle Forenmitglieder, das dies hier mein erster Eintrag ist 
Habe ein kleines Programm geschrieben, so ne Art Texteditor (mein erstes "Projekt", wenn man es so nennen will
),
hier der Code
Würde mich zum einen über allgmeine Ratschläge und Kritik freuen! (Aufbau, "Code-Stil", etc.)
Zum anderen habe ich ein konkretes Problem:
Ich versuche einige male mit
auf die JTextArea, die in jedem JInternalFrame vorhanden sein soll, zuzugreifen um diverse Funktionen auszuführen, nur klappt es irgendwie nicht!
Nun habe ich gehofft hier könnte mir jemand den Grund für mein "scheitern" sagen!
mfg Michael
Habe ein kleines Programm geschrieben, so ne Art Texteditor (mein erstes "Projekt", wenn man es so nennen will
hier der Code
Code:
package main;
import javax.swing.JFrame;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JFileChooser;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.beans.PropertyVetoException;
import java.util.ArrayList; //
public class JavaWriter
extends JFrame
{
public JDesktopPane desktop = new JDesktopPane();
public ArrayList<JInternalFrame> internalFrame = new ArrayList<JInternalFrame>();
public JToolBar toolBar;
public JFileChooser fileChooser;
private JButton newButton;
private JButton openButton;
private JButton saveButton;
private JButton aboutButton;
private Management manage = new Management(desktop);
public JavaWriter()
{
super("JavaWriter");
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
//JMenuBar
JMenuBar menuBar = new JMenuBar();
menuBar.add(createFileMenu());
menuBar.add(createEditMenu());
setJMenuBar(menuBar);
// ToolBar
setToolBar(toolBar);
// JDesktopPane
add(desktop, BorderLayout.CENTER);
}
public void setToolBar(JToolBar toolBar)
{
toolBar = new JToolBar("ToolBar", JToolBar.HORIZONTAL);
toolBar.setFloatable(false); // ToolBar should not be moved
newButton = new JButton(new ImageIcon("Images/newSmall.png"));
newButton.setToolTipText("Click for new File");
newButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
newButtonActionPerformed();
}
});
toolBar.add(newButton);
openButton = new JButton(new ImageIcon("Images/openSmall.png"));
openButton.setToolTipText("Click for opening a File");
openButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
openButtonActionPerformed();
}
});
toolBar.add(openButton);
saveButton = new JButton(new ImageIcon("Images/saveSmall.png"));
saveButton.setToolTipText("Click for saving selected File");
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
saveButtonActionPerformed();
}
});
toolBar.add(saveButton);
aboutButton = new JButton(new ImageIcon("Images/aboutSmall.png"));
aboutButton.setToolTipText("Click for Information");
aboutButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
aboutButtonActionPerformed();
}
});
toolBar.add(aboutButton);
add(toolBar, BorderLayout.NORTH);
}
public JMenu createFileMenu()
{
JMenu fileMenu = new JMenu("File");
JMenuItem item;
// Option "new"
item = new JMenuItem("New");
manage.setCtrlAccelerator(item, 'N');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.addChild(null, null);
}
});
fileMenu.add(item);
// Option "open"
item = new JMenuItem("Open File...");
manage.setCtrlAccelerator(item, 'O');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.chooseFile();
}
});
fileMenu.add(item);
// Option "save"
item = new JMenuItem("Save");
manage.setCtrlAccelerator(item, 'S');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
fileMenu.add(item);
// Option "saveas"
item = new JMenuItem("Save As...");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
fileMenu.add(item);
// insert separator
fileMenu.addSeparator();
// Option "exit"
item = new JMenuItem("Exit");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(1);
}
});
fileMenu.add(item);
return fileMenu;
}
public JMenu createEditMenu()
{
JMenu editMenu = new JMenu("Edit");
JMenuItem item;
// Option "undo"
item = new JMenuItem("Undo");
manage.setCtrlAccelerator(item, 'Z');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.chooseFile();
}
});
editMenu.add(item);
// Option "redo"
item = new JMenuItem("Redo");
manage.setCtrlAccelerator(item, 'Y');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.chooseFile();
}
});
editMenu.add(item);
// insert separator
editMenu.addSeparator();
// Option "cut"
item = new JMenuItem("Cut");
manage.setCtrlAccelerator(item, 'X');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.cutCopyPasteSelect("cut");
}
});
editMenu.add(item);
// Option "copy"
item = new JMenuItem("Copy");
manage.setCtrlAccelerator(item, 'C');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.cutCopyPasteSelect("copy");
}
});
editMenu.add(item);
// Option "paste"
item = new JMenuItem("Paste");
manage.setCtrlAccelerator(item, 'V');
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.cutCopyPasteSelect("paste");
}
});
editMenu.add(item);
// insert separator
editMenu.addSeparator();
// Option "selectall"
item = new JMenuItem("Select All");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manage.cutCopyPasteSelect("selectall");
}
});
editMenu.add(item);
return editMenu;
}
public void newButtonActionPerformed()
{
manage.addChild(null, null);
}
public void openButtonActionPerformed()
{
manage.chooseFile();
}
public void saveButtonActionPerformed()
{
JTextArea tempTextArea;
tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);
fileChooser = new JFileChooser();
int state = fileChooser.showSaveDialog(null);
if (state == JFileChooser.APPROVE_OPTION) {
write(tempTextArea, desktop.getSelectedFrame().getTitle());
}
}
public void aboutButtonActionPerformed()
{
manage.about();
}
public void write(JTextArea tempTextArea, String fileName)
{
File file = new File(fileName);
try {
tempTextArea.write(new FileWriter(file, true));
} catch (IOException e) {
e.printStackTrace();
}
}
}
package main;
import java.awt.Event;
import java.awt.GridLayout;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.KeyStroke;
public class Management
{
private JDesktopPane desktop;
public Management(JDesktopPane desktop)
{
this.desktop = desktop;
}
public void chooseFile()
{
JFileChooser fileChooser = new JFileChooser();
int state = fileChooser.showOpenDialog(null);
File file = null;
if (state == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
}
addChild(file, file.getName());
}
public void addChild(File file, String title)
{
JInternalFrame child = new JInternalFrame("NEW", true, true, true, true);
child.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
child.setSize(300, 300); // temporary solution TODO default set maximum of JDesktopPane
JTextArea textArea = new JTextArea();
if (file != null && title != null) {
try {
textArea.read(new FileReader(file), "file"); // file ok // fileName not working
}
catch (IOException e) {
textArea.setText("problems loading file");
}
child.add(new JScrollPane(textArea));
child.setVisible(true);
desktop.add(child);
try {
child.setSelected(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
else {
child.add(new JScrollPane(textArea));
child.setVisible(true);
desktop.add(child);
try {
child.setSelected(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
public JFrame about()
{
JFrame aboutFrame = new JFrame();
aboutFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
aboutFrame.setSize(400, 200);
aboutFrame.setLocation(200, 200);
aboutFrame.setResizable(false);
aboutFrame.setLayout(new GridLayout(3, 1));
// TODO temporary solution
JLabel[] aboutLabel = new JLabel[3];
String[] aboutText = {"Auhtor : Michael Birk", "About : Programm for creating and editing textbased files", "Information : still in construction!!"};
for (int i = 0; i < aboutLabel.length; i++) {
aboutLabel[i] = new JLabel(aboutText[i]);
aboutFrame.add(aboutLabel[i]);
}
aboutFrame.setVisible(true);
return aboutFrame;
}
public void cutCopyPasteSelect(String type)
{
JTextArea tempTextArea;
tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);
if (type == "cut") {
tempTextArea.cut();
}
else if (type == "copy") {
tempTextArea.copy();
}
else if (type == "paste") {
tempTextArea.paste();
}
else if (type == "selectall") {
tempTextArea.selectAll();
}
}
public void setCtrlAccelerator(JMenuItem item, char acc)
{
KeyStroke ks = KeyStroke.getKeyStroke(acc, Event.CTRL_MASK);
item.setAccelerator(ks);
}
}
Würde mich zum einen über allgmeine Ratschläge und Kritik freuen! (Aufbau, "Code-Stil", etc.)
Zum anderen habe ich ein konkretes Problem:
Ich versuche einige male mit
Code:
JTextArea tempTextArea;
tempTextArea = (JTextArea) desktop.getSelectedFrame().getComponent(1);
auf die JTextArea, die in jedem JInternalFrame vorhanden sein soll, zuzugreifen um diverse Funktionen auszuführen, nur klappt es irgendwie nicht!
Nun habe ich gehofft hier könnte mir jemand den Grund für mein "scheitern" sagen!
mfg Michael