Java-setVisible(true)

标签 java swing

我制作了一个简单的 JDialog,其中包含一个标签和一个按钮,它基本上相当于信息对话框。因此,在对话框中,有一个方法 display(),我在其中调用了 setVisible(true) 五次。

据我所知,当调用这个显示方法时,它应该只显示一次对话框,但它实际上创建了 5 个对话框,为什么它创建了 5 个对话框?

编辑1:我的问题与此更相似:

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 次,我该怎么做才能实现这一目标?

最佳答案

好吧,基本上它不会一次显示 5 次,只是连续显示 5 次

JDialog.setVisible(true) 是一个阻塞操作,会阻塞直到对话框关闭。

因此,当您关闭它时,会弹出一个对话框,应用程序会阻塞在 setVisible(true) 上,然后调用另一个 serVisible(true) 等等。

关于Java-setVisible(true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798723/

相关文章:

java - ComboBox 项目重叠

java - 在 Swing 组件的顶部绘画?

java - 为具有 Restful 服务和 Swing 特性的基于 Maven 的动态项目构建可执行的 war/jar

java - 如何在 Netbeans 中从一个 JFrame 或 JPanel 转到另一个 JFrame 或 JPanel?

java - 在java中运行时编译jasperreport子报表

java - 添加到 JScrollPane 后 JTable 不显示?

java - 如何使用相同的库在 Eclipse 中编译和运行?

java - 克隆可序列化对象 - JAVA

java - 真正动态的 JPA CriteriaBuilder

java - 使用绘制位置与平移变换时,Graphics2D 文本绘制在不同的位置