Avatar billede jesperthomsen1980 Nybegynder
26. november 2002 - 11:24 Der er 8 kommentarer og
1 løsning

Lukning af popupvindue

Hvordan får jeg dette popup vindue til at lukke når jeg trykker på knappen?

class Main
{
    public static void main(String args[])
    {
          new TestKlasseSwing().show();
    }
}


import javax.swing.*;
import java.awt.*;

public class JPop extends JDialog
{
    public JPop(Frame owner, String title, int x, int y)
    {
    super(owner, title);
    this.setSize(200, 200);
    this.setLocation(x, y);
    String tekst = "x: " + x + " y: " + y;
    reol reol = new reol();
    //JLabel label = new JLabel(tekst);
    this.getContentPane().add(reol);
    this.show();
    }
}


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class reol extends JPanel
{                               
                   
                    JButton                lukButton;
               
    public reol()
    {
    setLayout(null);

    setBorder(BorderFactory.createTitledBorder("popup"));
   
    lukButton         = new JButton("luk");
   
    add(lukButton);
   
    Insets insets = getInsets();

    lukButton.setBounds                 ( 20 + insets.left, 20 + insets.top, 100, 60);
   
   
   
    lukButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
              {
            //???   
              }
       
        }
        );
    }    public Dimension getPreferredSize()
    {
   
    return new Dimension(800, 500);
    }
}


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TestKlasseSwing extends JFrame implements WindowListener, MouseListener
{
    private int frameWidth = 640;
    private int frameHeight = 480;
   
    public TestKlasseSwing()
    {
        createFrame();
    }
   
    private void createFrame()
    {
        setTitle("TestKlasseSwing");
        setResizable(false);
        addWindowListener(this);
        addMouseListener(this);
   
        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        //setLocation( (screenSize.width-this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }

    public void windowOpened(WindowEvent e){}
    public void windowClosing(WindowEvent e){ dispose(); System.exit(0);}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}
   
    public void mouseReleased(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseClicked(MouseEvent e)
    {
    new JPop(this, "MyPop", e.getX(), e.getY());
    }
}
Avatar billede danielks Nybegynder
26. november 2002 - 11:34 #1
Er knappen er Popup vinduet ???
Avatar billede jesperthomsen1980 Nybegynder
26. november 2002 - 11:36 #2
nej knappen sidder på et popupvindue
Avatar billede danielks Nybegynder
26. november 2002 - 11:49 #3
oki du kan selv modde denne her så den passer til dig...

<input type="button" value="Luk" onClick="java script:window.close()">
Avatar billede carstenknudsen Nybegynder
26. november 2002 - 11:55 #4
danielks: Det er Java ikke JavaScript.
Avatar billede danielks Nybegynder
26. november 2002 - 11:58 #5
Bæ... det havde jeg ikke set...
Avatar billede Slettet bruger
02. december 2002 - 12:24 #6
hmmm... Det man gør er at sætte det "usynligt" og lade garbage collectoren fjerne det når den engang når dertil.

Hvis du tilføjer følgende kode til din actionListener burde det derfor virke som forventet:

reol.this.setVisible(false);  // Gemmer vinduet.
reol.this.dispose(); // Frigiver winduet (der er lånt af OS)

Herefter skal du så bare sørge for at du ikke referer til det andre steder fra, hvis du altså vi have det fjernet af garbagecollectoren.

Hygge
/Dennis
Avatar billede Slettet bruger
02. december 2002 - 12:33 #7
(Hmmm... Første gang jeg bruger det her, så jeg kom til at ligge mit svar som kommentar. For at undgå at du ikke bliver gjort opmærksom på at jeg har svaret ligger jeg lige dette "svar": Se ovenfor!)
Avatar billede jesperthomsen1980 Nybegynder
02. december 2002 - 12:54 #8
Den vil ikke bruge "dispose()"
reol.java:32: cannot resolve symbol
symbol  : method dispose  ()
location: class reol
Avatar billede Slettet bruger
02. december 2002 - 13:21 #9
Beklager... Det var mig der ikke havde læst din kode ordentlig. Du har ret.

Problemet er at der ikke er noget der binder din "reol" klasse og din "JPop" klasse sammen. Knappen ligger på "reol" og den forsøger at lukke en "JPop", men den kender ikke til den. Løsningerne her er mange ;-) :

1) Du kan slå de to klasser sammen, så du laver en klasse der extender en JDialog og laver et JPanel som den "putter på sig selv". Det JPanel skal så indeholde bl.a. knappen fra før, og nu vil du kunne kalde dispose() og setVisible(false) på dialogen.

2) Send dialogen med til din "reol" klasse. Enten som parameter til construktoren eller vha. en "set-metode".

Hvilken af de to ovenstående der er "den rigtige løsning" kommer meget an på situationen (ofte vil man slet ikke vælge at lade sine klasserne extende Swing klasserne (fx. JPanel, JWindow, JFrame og JDialog), men i stedet bare holde dem som variable i sine egne klasser.

Hygge
/Dennis
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