Java - setVisible(true)

时间:2016-09-30 19:24:37

标签: java swing

我做了一个简单的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次,我希望它显示最后一个,我该怎么做才能实现这个目标?

3 个答案:

答案 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");
    }