Aufruf eines Fensters in Java...

Hallo an alle,

ich habe da ein kleines Problem, welches anscheinend so einfach ist, daß ich in diversen Foren, Büchern, Tutorials, etc nix darüber gefunden habe.
Es geht darum in Java eine GUI zu programmieren. Dort soll nun ein Jbutton oder ein JMenueItem ein zweites Fenster/Frame öffnen. Der Main- und der Child-Frame sind geschrieben, doch wie verlinke ich die beiden?
Mein Gedanke war, einfach eine Instanz des Objektes (Child-Frame) per ActionListener aufzurufen und sie dann mit setvisible(TRUE); anzuzeigen. Es wird fehlerfrei compiliert und es passiert aber nix.
Code-Organisation: Beide JForms sind im selben Package, der Main-Frame enthält ein #include.. des Child-Frames
Vielleicht kann mir jemand in zwei einfachen Worten diesen link-Vorgang darstellen.
Danke vorweg

Byte

System: Windows XP; SUSE
IDE: NetBeans 6.5; Eclipse
Nerve-Status: :wall:
 
Nur aufgrund Deiner Beschreibung lässt sich nur schwer eine Fehlerquelle ausmachen, es wäre hilfreich wenn Du den Code posten würdest...
 
Hi,

hat dein "child-frame" denn eine korrekte Position und Größe?

#setLocation(int,int)
#setDimension(Dimension dim)

cu
serow
 
So wie du es beschreibst, macht man es normalerweise auch.

Instanz des Child-Fensters erstellen und dann child.setVisible(true); aufrufen.
(Wie schon angemewrkt wurde: Wenn du die größe des Fensters nicht explizit setzt, wird es so klein gezogen, dass du nur einen Teil der Titelleiste siehst. Man kann aber einfach frame.pack() aufrufen, um es auf minimale sinnvolle Größe zu bringen)
Natürlich ist es nochmal anders, wenn du ein modales Fenster (also ein Fenster, welches das Parent-Fenster sperrt, solange es offen ist) hast. Dann übergibst du das Parentfenster normalerweise im Constructor des Child-Fensters.

Zu modalen Fenstern hast du hier etwas:
http://openbook.galileocomputing.de...16_021.htm#mj5be6600eb595f96d342d8a0b04c7f2fe

Und nicht-modale Fenster machst du genau so auf, wie du auch dein Grundfenster aufmachst. Wenn du dir die Fensterinstanz irgendwo als Variable abspeicherst, kannst du es auch wieder zumachen (oder andere Events auslösen).

mfg, metax.
 
Erst mal danke für die Antworten, hier ein Beispiel wie ich es programmieren würde:

Code:
public class MainClass extends JPanel{



  public MainClass() {

    JButton btn1 = new JButton("Button1");
    btn1.addActionListener(new ButtonListener());
    add(btn1);

  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);
  }
}

class ButtonListener implements ActionListener {
  ButtonListener() {
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Button1")) {
      Child.setVisible(true);


    }
  }
}


dabei ist Child das zweite Fenster mit
Code:
package example;

public class Child extends javax.swing.JPanel {

    public Child() {....

Ich bekomme beim besten Willen den Fehler nicht heraus, vielleicht seh ich den Wald vor lauter Bäumen auch nicht...
 
Erst mal danke für die Antworten, hier ein Beispiel
Code:
  public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Button1")) {
      [B]Child.setVisible(true);[/B]
    }
}

Hab ewig kein Swing mehr gemacht. Der setVisible-Aufruf sieht mir aber nach statischer Methode aus. Ich kenn die selbst nicht und weiß daher nicht was die machen soll. Versuch mal die Methode an dem Objekt aufzurufen.

edit: ich seh auch nicht wo die Instanz vom Child erzeugt wird. Hast du da was weggelassen oder fehlt das in deinem Code?
 
Argh... natürlich! Vielen Dank für deinen Komentar!
Natürlich muss es heissen:

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Button1")) {
Child cf = new Child();
cf.setVisible(true);
...

Manchmal steht man echt wie der "Ochs" davor und sieht es nicht...
Grüße

Byte
 
Jetzt mal blöd gefragt: War das jetzt die Problemlösung? Ich könnte setVisible() gar nicht statisch aufrufen. Ich bekomm da ne Fehlermeldung "Erstellen eines statischen Verweises auf die nicht statische Methode setVisible(boolean) vom Typ JComponent nicht möglich".
 
im grunde schon. bei JButton klapt das, jedoch bei JmenuItem(s) muss es irgendwie anders sein. ich bin gerade über den verschiedenen actionlistener-arten am studieren.
grüße

byte
 
Zuletzt bearbeitet:
nein es passiert garnix... der compiler geht fehlerfrei durch und das prog. läuft ohne abzustürzen.
ich habe die gleiche Funktion aufgerufen wie beim JButton, jedoch passierte beim JMenuItem garnix.
selbst die "system.exit(0)-Anweisung" wurde nicht ausgeführt.
ich denke jedoch daß in meinen menüs irgendetwas fundamental falsch läuft, aber daran arbeite ich noch. Unterscheidet sich der actionlistener des JButtons von dem des jMenuItems?
 
Zuletzt bearbeitet:
Zurück
Oben