Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine simple frage nach der besten strategie:
ich habe ein control gemacht, bestehend aus einem button und einem label und füge dies in ein JFrame ein, aber wie kann ich jetzt zB das event für den button setzen, da dies ja auch ggf. vom JFrame anhängen könnte. Eine lösung für mich war, dass ich einfach im JFrame mit einer schleife nach dem button gesucht habe (mit getName()) und dann das event dort hinzugefügt, allerdings halte ich diese art und weise für nicht besonders elegant. wie macht man es richtig?
ich habe eine simple frage nach der besten strategie:
ich habe ein control gemacht, bestehend aus einem button und einem label und füge dies in ein JFrame ein, aber wie kann ich jetzt zB das event für den button setzen, da dies ja auch ggf. vom JFrame anhängen könnte. Eine lösung für mich war, dass ich einfach im JFrame mit einer schleife nach dem button gesucht habe (mit getName()) und dann das event dort hinzugefügt, allerdings halte ich diese art und weise für nicht besonders elegant. wie macht man es richtig?
Leider habe ich nicht ganz verstanden was du genau meinst???:L
Aber wenn ich es richtig verstanden habe, geht es dir darum, dass nach dem drücken auf den Button etwas passiert!? Wenn das der Fall ist, gibt es dort mehrere Möglichkeiten, du kannst z.B den MouseListener in deiner Klasse implements, dann musst du dessen Methoden überschreiben und dort kannst du auch bestimmen was nach dem klick auf den Button passiert, so in etwa kannst du das machen
danke erstmal für deine schnelle antwort, in der tat ist es nicht ganz das was ich meinte, hier einander versuch mein problem zu erklären:
Ich habe eine klasse Menu gemacht, welche von JToolBar erbt; in der klasse Menu habe ich zwei Buttons.
Ich habe jetzt eine weitere klasse Main (=JFrame) gemacht, in der ich die klasse als control einfüge. Das funktioniert auch soweit.
Meine frage ist jetzt, Menu ist sehr allgemein nur basierend auf zwei buttons. Wie kriege ich jetzt die events dort rein? Klar kann ich die wie von dir gezeigt, direkt in die klasse Menu einbauen, aber in dieser klasse kenne ich "die anderen dinge nicht", zB sets in denen etwas gespeichert werden soll. Sagen wir in der klasse Main habe ich zusätzlich ein Set und immer wenn man auf einen der beiden buttons drückt soll ein element hinzugefügt werden, dass kann ich allerdings nur dann machen, wenn ich das event innerhalb von der Main* klasse definiere, nicht in Menu.
Meine lösung dafür war nun, wie schon gesagt, das event in Main zu definieren in dem ich mir über newMenu.getComponents() alle controls hole und dann dem entsprechenden button das event anhänge. das halte ich aber für sehr unelegant...
verstehst du was ich meine?
*Main meint übrigens nicht die public static funktion, sondern ist mein klassen name
Also ich kann mit deinem Text leider nichts anfangen:bahnhofmag sein, dass es an mir liegt), aber du kannst ja evtl. den Code mal zeigen und ich werde mal :rtfm:, villeicht verstehe ich das dann besser!
MFG
Main-Klasse
[Java]
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
protected int k=10;
private JTextArea bla;
public Main() {
setVisible(true);
setSize(500,500);
setLayout(new BorderLayout());
Menu newMenu = new Menu();
getContentPane().add(newMenu, BorderLayout.NORTH);
bla = new JTextArea();
bla.setText("dds");
getContentPane().add(bla, BorderLayout.CENTER);
System.out.println(k);
}
public static void main (String[] args) {
Main newMain = new Main();
}
}
[/code]
Menu-Klasse
Java:
public class Menu extends JToolBar {
private static final long serialVersionUID = 1L;
private int counter;
public Menu () {
super();
JButton setSettings = new JButton();
setSettings.setName("setSettings");
setSettings.setText("Settings");
JButton addSource = new JButton();
addSource.setName("addSource");
addSource.setText("add Source");
setLayout(new FlowLayout(FlowLayout.LEFT));
//setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(setSettings);
add(addSource);
setVisible(true);
setSettings.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
counter++;
System.out.println("klick");
if ((Main)getParent() != null)
{
((Main)getParent()).k=counter;
System.out.println(((Main)getParent()).k);
}
}
});
}
}
soweit bin ich jetzt, allerdings kriege ich jetzt immer einen error wenn ich auf den button "setSettings" klicke:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel cannot be cast to GUI2.Main
at GUI2.Menu$1.actionPerformed(Menu.java:52)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
weil der Parent deiner Komponente nicht das Main-Fenster, sondern dessen ContenPane ist (da fügst du deine Komponente ja auch hinzu)
Warum machst du in Menu nicht einfach zwei Methoden, in denen du die ActionListener einfach an die Buttons weiterleitest?
Java:
class Menu {
private JButton setSettings;
...
public void addSettingsActionListener(ActionListener al) {
setSettings.addActionListener(al);
}
...
}
Dann kannst du dir einfach in Main ordentlichen Listene schreiben, die auch auf alles nötige Zugriff hat.
Mit der getParent()-Technik musst du vorsichtig sein: Da verschiebst du die Komponente später vielleicht mal auf einen Unterpanel oder so, und schon fliegt dir das Ding um die Ohren...