阻止用户点击当前帧以外的其他地方的最佳方法?

时间:2017-12-30 12:15:39

标签: java swing user-interface

所以,我想知道,如何阻止用户退出或切换到应用程序中的另一个JFrame?我还没有代码,但这张图片应该足够清晰: image

那些灰色方块是JFrame。它上面的数字2的框架位于顶部,我希望它保持这种状态,直到我以编程方式关闭它。任何操作,例如点击带有数字1的帧或尝试使用数字2进行任何帧外操作,都应该会再次聚焦于带有数字2的帧。

第2帧中的逻辑步骤是必不可少的,所以我想确保用户填写框架中的from。

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

如评论中所述,使用模态对话框将对象指定为所有者,在解除对话框之前,用户将无法访问该框架。

import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class BlockUserFromFrame {

    BlockUserFromFrame() {
        JFrame f = new JFrame("Try to access frame!");
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JLabel l = new JLabel("Access frame after dialog disappears!");
        l.setBorder(new EmptyBorder(50, 100, 50, 100));
        f.add(l);
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);

        // use a constructor that allows us to specify a parent and modality
        JDialog d = new JDialog(f, true);
        JLabel l1 = new JLabel("Dismiss dialog to access frame!");
        l1.setBorder(new EmptyBorder(20, 100, 10, 100));
        d.add(l1);
        d.pack();
        d.setLocationRelativeTo(f);
        d.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            BlockUserFromFrame o = new BlockUserFromFrame();
        };
        SwingUtilities.invokeLater(r);
    }
}