我做了一個簡單的JDialog,它包含一個標籤和一個按鈕,它基本上相當於一個信息對話框。所以在對話框中有一個方法display(),其中我調用了setVisible(true)五次。Java - setVisible(true)
據我所知,當這個顯示方法被調用時,它應該只顯示一次對話框,但它實際上創建了5個對話框,爲什麼它會創建5個對話框?
EDIT1:我的問題是更類似於此:
import java.awt.event.*;import java.awt.*;import javax.swing.*;
class Demo implements ActionListener
{
JFrame f;
JButton b;
DisplayDialog dialog;
public Demo()
{
f = new JFrame();
f.setSize(200,200);
b = new JButton("Click me");
f.add(b);
dialog = new DisplayDialog();
b.addActionListener(this);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object o = e.getSource();
if(o==b)
{
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello5");
}
}
public static void main(String args[])
{
Demo d = new Demo();
}
class DisplayDialog implements ActionListener
{
JDialog dg;
JLabel l;
JButton b;
Font myfont;
public DisplayDialog()
{
dg = new JDialog(f,"Alert!",true);
dg.setSize(300,150);
l = new JLabel("Message");
b = new JButton("OK");
myfont = new Font("Serif",Font.BOLD,12);
l.setFont(myfont);
dg.add(l);
dg.add(b,"South");
dg.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object o = e.getSource();
if(o==b)
{
dg.setVisible(false);
}
}
public void display(String str)
{
l.setText(str);
dg.setVisible(true);
}
}
}
EDIT2:現在,這樣的情況在我的計劃,而不是顯示對話框5次發生,我希望它顯示最後一個,我能做些什麼來實現這一目標?
哪裏你叫'顯示(字符串str)'? – Antoniossss
@Antoniossss只需創建一個對象並用您選擇的字符串調用它即可。 在我的程序中,我只是添加了一個新的JMenuItem,並在被點擊時調用display(String str)。 –
但是這是你的例子,不工作,所以提供你的代碼,特別是這取決於'f'變量(可能是JFrame),所以誰知道你可以在那裏突破的帽子。 – Antoniossss