弹出直到特定条件发生的消息

时间:2014-07-22 08:43:07

标签: java swing

我正在用java在互联网上播放游戏。我正在使用流来发送和接收数据。

我的问题是:如何显示弹出窗口,告知用户他必须等待。

我写了这个:

while(!in.ready())
    JOptionPane.showMessageDialog(this, "Not your turn");

它起作用并且还防止用户按下按钮,但也强制不断地按下" ok"按钮。那么有什么弹出窗口是不可能关闭的,直到"在"流会准备好吗?或任何其他有用的选项?

2 个答案:

答案 0 :(得分:0)

你必须创建自己的。例如:

class CustomBlockerDialog extends JDialog {
    public CustomBlockerDialog(Frame owner, String text) {
        super(owner, true);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setSize(300, 100); // Adjust if needed
        setTitle("");
        add(new JLabel(text, SwingConstants.CENTER));
    } 
} 

显示/隐藏(从主窗口):

CustomBlockerDialog block = new CustomBlockerDialog(this, "Not your turn"); // Creation, once

block.setVisible(true); // Show

block.setVisible(false); // Hide

请记住用其他帖子中的SwingUtilities.invokeLater来调用它们。

答案 1 :(得分:0)

你必须创建一个自定义对话框打开它,并在流准备就绪时关闭:

    final JDialog dialog = new JDialog();

    dialog.setPreferredSize(new Dimension(300, 90));
    dialog.add(new JLabel("        Please Wait..."));
    dialog.setUndecorated(true); // hide close button
    dialog.pack();
    dialog.setLocation(400, 400); // or next line
    //dialog.setLocationRelativeTo(this);
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);


    while(!in.ready()){ /* wait...*/ };


    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            dialog.setVisible(false);
            dialog.dispose();
        }
    });