Avatar billede zeppeliner Nybegynder
04. marts 2005 - 19:31 Der er 10 kommentarer og
1 løsning

Lukke frame fra en anden klasse

Jeg har oprettet en frame med et BorderLayout. For at tilføge to knapper til BorderLayout.SOUTH har jeg oprettet en anden klasse med de to knapper, og så oprettet et objekt af denne klasse i min frame, og sat det objevt i BorderLayout.SOUTH. Mit problem er så at jeg ikke kan finde ud af at lukke min frame, uden at bruge System.exit(0), som lukker alt! Nogen idéer?
Avatar billede arne_v Ekspert
04. marts 2005 - 19:39 #1
Sørg for at der hvor du skal lukke har du en reference til JFrame'n - så
kan du kalde dispose metoden på den (jeg mener at det er dispose der lukker).
Avatar billede zeppeliner Nybegynder
04. marts 2005 - 19:41 #2
Hvordan laver jeg sådan en reference?
Avatar billede arne_v Ekspert
04. marts 2005 - 19:43 #3
Typisk vil man sende this med over i constructor og så lade klassen gemme
en reference til JFrame'n
Avatar billede zeppeliner Nybegynder
04. marts 2005 - 19:44 #4
Hmm...er bange for jeg bliver nødt til at få den skåret lidt mere ud i pap!
Avatar billede arne_v Ekspert
04. marts 2005 - 19:48 #5
public class X {
  private JFrame parent;
  ...
  public X(JFrame parent) {
      this.parent = parent;
  }
  ...
  public something() {
      parent.dispose();
  }
}
Avatar billede arne_v Ekspert
04. marts 2005 - 19:49 #6
Og i din frame klasse:

X x = new X(this);
Avatar billede zeppeliner Nybegynder
04. marts 2005 - 20:13 #7
Lækkert...det virker! Send et svar for point. Mange tak for hjælpen!
Avatar billede arne_v Ekspert
04. marts 2005 - 20:14 #8
kommer her
Avatar billede _carsten Nybegynder
04. marts 2005 - 20:16 #9
Jeg ved ikke om det her er pap, men normalt har man kun én frame og derefter et utal af dialoger, altså én JFrame, herefter er det JDialog's.

Her er et eksempel - dialogen kunne også være en klasse som extender JDialog.



import javax.swing.JDialog;

public class TestFrame extends javax.swing.JFrame {
   
    public TestFrame() {
        initComponents();
        setTitle("Applikation");
        setSize(250,250);
    }

    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jButton1.setText("\u00c5ben dialog");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        add(jButton1, java.awt.BorderLayout.NORTH);

        jButton2.setText("Luk applikation");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                closeApp(evt);
            }
        });

        add(jButton2, java.awt.BorderLayout.SOUTH);

        pack();
    }

    private void closeApp(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }

    // Åbner en ny dialog
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        JDialog d = new JDialog(this, "Ny dialog", true);
        d.setSize(150,150);
        d.setLocationRelativeTo(this);
        d.setVisible(true);
    }

    private void exitForm(java.awt.event.WindowEvent evt) {                         
        System.exit(0);
    }                       

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
}
Avatar billede arne_v Ekspert
04. marts 2005 - 20:21 #10
Som jeg læste spørgsmålet så var det en klasse som extender JFrame med X som arver fra
JPanel (eller tilsvarende) med 2 JButton. Og der skulle lukkes i X.
Avatar billede _carsten Nybegynder
04. marts 2005 - 20:30 #11
Hmmm - har lige læst det en gang mere, og ææhhhhh sådan burde jeg også have læst det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester