Avatar billede pham Nybegynder
30. januar 2004 - 11:11 Der er 16 kommentarer og
1 løsning

JFrame onTop

Hej, hvordan sætter jeg en JFrame til at være onTop, så man skal lukke dette vindue før man kan bruge resten af programmet?
Avatar billede pham Nybegynder
30. januar 2004 - 11:12 #1
Hov kom til at oprette den som 0 point, hvordan ændre jeg dette?
Avatar billede pham Nybegynder
30. januar 2004 - 11:15 #2
så er der afsat 30 point.. :-)
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:16 #3
Jeg tror du skal have fat i JDialog. Der kan du nemlig sende en "owner" med i constructoren - så den altid vil være 'onTop'...
Avatar billede pham Nybegynder
30. januar 2004 - 11:20 #4
det kan man måske ikke med en JFrame?
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:22 #5
Det tror jeg ikke. Men jeg har lige lavet et eksempel som illustrerer det:

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

public class TestOnTop extends JFrame
{
    private JButton button = new JButton("Tryk på mig");
   
    public TestOnTop()
    {
        setSize(300, 300);   
       
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                new MyDialog(TestOnTop.this).show();
            }
        });
       
        this.getContentPane().add(button, BorderLayout.SOUTH);
    }
   
    private class MyDialog extends JDialog
    {
        public MyDialog(JFrame owner)
        {
            super(owner);
            setSize(200, 200);
       
            JLabel label = new JLabel("Jeg er 'onTop'");
       
            this.getContentPane().add(label, BorderLayout.CENTER);   
        }
    }   
   
    public static void main(String[] args)
    {
        new TestOnTop().show();
    }   
}
Avatar billede pham Nybegynder
30. januar 2004 - 11:39 #6
det virker ikke helt, for jeg kan stadig bruger knappen på den forrige frame uden at lukke JDialog!
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:41 #7
Ja, okay. Jeg tror ikke du kan komme udenom at skulle disable dine knapper og diverse andre ting. Men den er ontop :)
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:42 #8
Nu ved jeg ikke hvor meget information du skal have i din første frame, men du kunne jo også lave din egen JOptionPane. Den lukker af for brug af andre ting, så længe den er synlig.
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:48 #9
Nyt lille eksempel:

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

public class TestOnTop extends JFrame
{
    private JButton button = new JButton("Tryk på mig");
   
    public TestOnTop()
    {
        setSize(300, 300);   
       
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                createOptionPane();
            }
        });
       
        this.getContentPane().add(button, BorderLayout.SOUTH);
    }
   
    public void createOptionPane()
    {
        Object[] object = {"Ok"};
       
        JOptionPane.showOptionDialog(
            this,
            new MyDialog(),
            "OnTop",
            JOptionPane.OK_OPTION,
            JOptionPane.PLAIN_MESSAGE,
            null,
            object,
            object[0]);   
    }
   
    private class MyDialog extends JPanel
    {
        public MyDialog()
        {
            setSize(200, 200);
       
            JLabel label = new JLabel("Jeg er 'onTop'");
       
            add(label, BorderLayout.CENTER);   
        }
    }   
   
    public static void main(String[] args)
    {
        new TestOnTop().show();
    }   
}

Her bruger jeg JOptionPane - den vil altid være onTop.

Du kan jo ændre MyDialog-klassen, så den indeholder de ting du gerne vil ha' i.
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:50 #10
Hov... en lille misser:

setSize(200, 200); // i MyDialog klassen skal ændres til:

setPreferredSize(new Dimension(200, 200));
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 11:50 #11
Det virker i hvert fald efter hensigten :)
Avatar billede labanos Nybegynder
30. januar 2004 - 12:47 #12
mht til jdialog, så findes der en konstruktor der tager en parameter boolean "modal", den kan man sætte til true hvis man ønsker at dialogen skal "blokere" for interaktion med andet mens dialogen er oppe..

ved ik lige hvad det er du konkret vil lave, men modal er god til at spærre programmet hvis man SKAL have et eller andet input.. fx login, reg eller tilsvarende..
Avatar billede mikkelbm Nybegynder
30. januar 2004 - 12:50 #13
Doh, ja...
Den havde jeg da lige glemt :)
Avatar billede labanos Nybegynder
30. januar 2004 - 12:51 #14
:-)
Avatar billede _carsten Nybegynder
30. januar 2004 - 12:51 #15
Du skal bare rette følgende i mikkelbm's eksempel, så virker det

Ret: new MyDialog(TestOnTop.this).show();

Til: new MyDialog(TestOnTop.this, true).show();

og

Ret: 
        public MyDialog(JFrame owner, boolean modal)
        {
            super(owner, modal);
Avatar billede mikkelbm Nybegynder
31. januar 2004 - 18:49 #16
Ok?
Avatar billede pham Nybegynder
02. februar 2004 - 16:33 #17
Ja det var ok, undskyld glemte at give point.. :-)
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