【问题标题】:Keep focus on a JDialog using SwingUtilities.invokeLater?使用 SwingUtilities.invokeLater 继续关注 JDialog?
【发布时间】:2013-04-17 20:49:21
【问题描述】:

我想显示JDialog,所以我使用这个:

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() { new DialogBox().setVisible(true); }
});

它可以正常显示,但是我的JDialog 没有保持焦点,这是它需要的(用户应该无法在该对话框打开时使用主 UI 工作)。

删除SwingUtilities.invokeLater() 是否安全?

哦,根据this question,扩展 JDialog 或 JFrame 是不明智的,为什么?这就是我一直这样做的方式。

【问题讨论】:

  • 你不想要一个模态对话框吗?
  • 扩展 JDialog 或 JFrame 归结为设计。您实际上向这些顶级容器添加了哪些功能?这里还需要考虑的是,如果您直接在这些顶级容器之一之上构建您的 UI,那么您将来会限制您的 UI 组件的使用。最好扩展 JPanel 之类的东西,在此基础上构建您的 UI,提供所需的访问器并将其放置在所需顶级容器的实例之上

标签: java multithreading swing user-interface jdialog


【解决方案1】:

它可以正常显示,但是我的 JDialog 没有保留 焦点,它需要(用户不应该能够使用 对话框打开时的主 UI)。

必须 setModal(true)setModalityTypes(various types) 用于父级,或当前 JVM 中的所有窗口

Is it safe to get rid of the SwingUtilities.invokeLater()

没错,所有Top-Level Container 都应该在EDT, wrapped in invokeLater() 上创建,包括JOptionPane

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多