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?
Annonceindlæg fra Idura
30. januar 2004 - 11:12
#1
Hov kom til at oprette den som 0 point, hvordan ændre jeg dette?
30. januar 2004 - 11:15
#2
så er der afsat 30 point.. :-)
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'...
30. januar 2004 - 11:20
#4
det kan man måske ikke med en JFrame?
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(); } }
30. januar 2004 - 11:39
#6
det virker ikke helt, for jeg kan stadig bruger knappen på den forrige frame uden at lukke JDialog!
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 :)
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.
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.
30. januar 2004 - 11:50
#10
Hov... en lille misser: setSize(200, 200); // i MyDialog klassen skal ændres til: setPreferredSize(new Dimension(200, 200));
30. januar 2004 - 11:50
#11
Det virker i hvert fald efter hensigten :)
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..
30. januar 2004 - 12:50
#13
Doh, ja... Den havde jeg da lige glemt :)
30. januar 2004 - 12:51
#14
:-)
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);
31. januar 2004 - 18:49
#16
Ok?
02. februar 2004 - 16:33
#17
Ja det var ok, undskyld glemte at give point.. :-)
Kurser inden for grundlæggende programmering