Java 阻止用户单击当前帧以外的其他位置的最佳方法?
所以,我想知道,如何阻止用户退出或切换到应用程序中的另一个JFrame?我还没有代码,但这张图片应该足够清晰: 那些灰色的方块是JFrames。上面有数字2的框架位于顶部,我希望它保持这种状态,直到我以编程方式关闭它。任何像点击数字为1的帧或尝试在数字为2的帧外执行任何操作,都会导致再次关注数字为2的帧 第2帧中的逻辑步骤非常重要,因此我想确保用户将在该帧中填写fromJava 阻止用户单击当前帧以外的其他位置的最佳方法?,java,swing,user-interface,Java,Swing,User Interface,所以,我想知道,如何阻止用户退出或切换到应用程序中的另一个JFrame?我还没有代码,但这张图片应该足够清晰: 那些灰色的方块是JFrames。上面有数字2的框架位于顶部,我希望它保持这种状态,直到我以编程方式关闭它。任何像点击数字为1的帧或尝试在数字为2的帧外执行任何操作,都会导致再次关注数字为2的帧 第2帧中的逻辑步骤非常重要,因此我想确保用户将在该帧中填写from 谢谢你抽出时间 如注释中所述,使用将框架指定为所有者的模式对话框,用户将无法访问框架,直到该对话框被取消 import ja
谢谢你抽出时间 如注释中所述,使用将框架指定为所有者的模式对话框,用户将无法访问框架,直到该对话框被取消
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);
}
}
如注释中所述,使用将框架指定为所有者的模式对话框,在对话框关闭之前,用户将无法访问框架
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);
}
}
如果某个窗口从
JDialog
(并设置为modal
。您不能限制用户单击应用程序之外的任何其他位置。这假设所有窗口都是从同一个JVSEE生成的,以获取更多详细信息谢谢您的回答!因此,我应该从扩展JFrame切换到JDialog?是的,我需要限制关注另一个窗口。“我应该从扩展JFrame切换到JDialog?”代码应该使用一个JFrame
和应用程序需要的尽可能多的JDialog
窗口,但可能没有很好的理由扩展这两个类。如果从JDialog
(并设置为modal
。您不能限制用户单击应用程序之外的任何其他位置。这假设所有窗口都是从同一个JVSEE生成的,以获取更多详细信息谢谢您的回答!因此,我应该从扩展JFrame切换到JDialog?是的,我需要限制关注另一个窗口。”我应该从扩展JFrame切换到JDialog?”代码应该使用一个JFrame
和应用程序需要的尽可能多的JDialog
窗口,但可能没有很好的理由扩展这两个类。