我做了一个简单的JDialog,它包含一个标签和一个按钮,它基本上相当于信息对话框。所以在对话框中,有一个方法display(),其中我调用了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次,我希望它显示最后一个,我该怎么做才能实现这个目标?
答案 0 :(得分:4)
好的基本上是一次不显示5次只有连续5次显示。
JDialog.setVisible(true)
是一个阻止操作并阻塞,直到对话框关闭。
当您关闭它时会弹出一个对话框并在setVisible(true)
上弹出应用程序块,调用另一个serVisible(true)
,依此类推。
答案 1 :(得分:0)
您只能使用
创建一个对话框实例dg = new JDialog(f,"Alert!",true);
然后,您通过多次调用setVisible(true)
来显示同一个对话框五次。
答案 2 :(得分:0)
关于你的编辑:你的问题是什么?
更改
if (o == b) {
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello");
dialog.display("Hello5");
}
到
if (o == b) {
dialog.display("Hello");
}