Hi,
um bisschen zu basteln und Java, hier besonders swing, zu lernen, habe ich mir ein Programm geschrieben, dass ein Fenster öffnet mit menü und textfelder und Buttons. Später soll das mal ein kleiner Taschenrechner werden.
Ich habe das Fenster, das Layout und das Menü für die Übersicht in verschieden Klassen eingeteilt.
In der Klasse Menue steht nun z.B. u.a.
ActionListener printListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("MenuItem [" + event.getActionCommand()+ "] was pressed");
if (event.getActionCommand()=="Beenden"){
System.exit(0);
}
}
};
Das funktioniert auch einwandfrei. Nun will ich aber auch, wenn man im Menü auf Neu klickt, dass dann 2 gewisse Textfelder gelöscht werden, die in der Klasse Fenster definiert wurden.
Leider finde ich kein gutes Beispiel im netz, dass mir das zeigt.
Wenn ihr mir ein primitives Beispiel geben könntet oder ihr mir Tips zu meinem Code geben könntet, wäre ich sehr verbunden. 8)
Hier mein Code:
Falls die Frage noch nicht ganz klar sein sollte, ich möchte also z.B. wenn man im menü auf Neu klickt, dass dann der Inhalt vom TextField tf geleert wird. Auf tf.setText(""); reagiert er klarerweise mit tf can not be resolved.
Die Klasse GridBagLayout lasse ich hier mal weg, da sie einwandfrei funktioniert und das ja auch net meine Frage ist.
edited by thE_29: Code Tags weg!
um bisschen zu basteln und Java, hier besonders swing, zu lernen, habe ich mir ein Programm geschrieben, dass ein Fenster öffnet mit menü und textfelder und Buttons. Später soll das mal ein kleiner Taschenrechner werden.
Ich habe das Fenster, das Layout und das Menü für die Übersicht in verschieden Klassen eingeteilt.
In der Klasse Menue steht nun z.B. u.a.
ActionListener printListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("MenuItem [" + event.getActionCommand()+ "] was pressed");
if (event.getActionCommand()=="Beenden"){
System.exit(0);
}
}
};
Das funktioniert auch einwandfrei. Nun will ich aber auch, wenn man im Menü auf Neu klickt, dass dann 2 gewisse Textfelder gelöscht werden, die in der Klasse Fenster definiert wurden.
Leider finde ich kein gutes Beispiel im netz, dass mir das zeigt.
Wenn ihr mir ein primitives Beispiel geben könntet oder ihr mir Tips zu meinem Code geben könntet, wäre ich sehr verbunden. 8)
Hier mein Code:
Code:
--- Fenster.java ---
package packtest;
import packtest.GridBag;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Fenster {
int laenge;
int hoehe;
int xpos, ypos;
JFrame frame;
public Fenster(int laenge, int hoehe, int xpos, int ypos) {
this.laenge = laenge;
this.hoehe = hoehe;
this.xpos = xpos;
this.ypos = ypos;
}
public Fenster(int laenge, int hoehe) {
this(laenge,hoehe,10,10);
}
public void openwindow(String titel) {
JFrame frame = new JFrame(titel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(this.xpos,this.ypos,this.laenge,this.hoehe);
frame.setResizable(true);
Container c = frame.getContentPane();
GridBagLayout gbl = new GridBagLayout();
c.setLayout(gbl);
JTextField tf = new JTextField();
GridBag.addComponent( c, gbl, tf, 0, 0, 1, 1, 0, 0 );
JButton b = new JButton( "Ende" );
GridBag.addComponent( c, gbl, b, 0, 1, 1, 1, 0, 0 );
ActionListener al = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.exit( 0 );
}
};
frame.setJMenuBar(new Menue());
b.addActionListener( al );
b.setBounds(10,10,50,50);
frame.setVisible(true);
}
public void closewindow() {
this.frame.setVisible(false);
this.frame.dispose();
}
}
Code:
--- Menue.java ---
package packtest;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Menue extends JMenuBar{
String[] fileItems = new String[] {"Neu", "Öffnen", "Laden", "Beenden"};
String[] editItems = new String[] {"Kopieren", "Einfügen", "Ausschneiden"};
char[] fileshortcuts = new char[] {'N', 'O', 'L', 'B'};
char[] editshortcuts = new char[] {'K', 'E', 'A'};
public Menue() {
JMenu fileMenu = new JMenu("Datei");
JMenu editMenu = new JMenu("Bearbeiten");
JMenu subMenu = new JMenu("subMenu");
JMenu subMenu2 = new JMenu("subMenu");
ActionListener printListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("MenuItem [" + event.getActionCommand()+ "] was pressed");
if (event.getActionCommand()=="Beenden"){
System.exit(0);
}
}
};
for (int j=0;j<fileItems.length;j++) {
JMenuItem item = new JMenuItem(fileItems[j]);
item.addActionListener(printListener);
fileMenu.add(item);
}
for (int i=0;i<editItems.length;i++) {
JMenuItem item = new JMenuItem(editItems[i]);
item.setAccelerator(KeyStroke.getKeyStroke(editshortcuts[i],Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(),false));
item.addActionListener(printListener);
editMenu.add(item);
}
add(fileMenu);
add(editMenu);
}
}
Falls die Frage noch nicht ganz klar sein sollte, ich möchte also z.B. wenn man im menü auf Neu klickt, dass dann der Inhalt vom TextField tf geleert wird. Auf tf.setText(""); reagiert er klarerweise mit tf can not be resolved.
Die Klasse GridBagLayout lasse ich hier mal weg, da sie einwandfrei funktioniert und das ja auch net meine Frage ist.
edited by thE_29: Code Tags weg!