gpt4 book ai didi

java - 更改 JDialogs 模式以仅阻止一个 JFrame

转载 作者:行者123 更新时间:2023-12-01 13:06:41 25 4
gpt4 key购买 nike

我有那段代码:

public WaitingDiag(Window mainWindow, String string, JFrame stFrame) {
dialog = new JDialog(stFrame);
// dialog.setForeground(new Color(100, 100, 100));
dialog.setUndecorated(true);
dialog.setSize(WAITING_DIALOG_WIDTH, WAITING_DIALOG_HEIGHT);
int x = mainWindow.getX() + (mainWindow.getWidth() - dialog.getWidth())
/ 2;
int y = mainWindow.getY()
+ (mainWindow.getHeight() - dialog.getHeight()) / 2;
progressBar.setForeground(new Color(0, 128, 0));
progressBar.setString("Loading data...");
Font font = new Font("Serif", Font.BOLD, 12);
progressBar.setFont(font);
progressBar.setStringPainted(true);
progressBar.setIndeterminate(true);
dialog.getContentPane().add(progressBar);
dialog.setLocation(x, y);
dialog.setModal(true);
}

我的问题是,当 dialog 出现时,它会阻止所有应用程序,并且它包含在 JFrame stFrame 中(位于事实上是一个 Tab),我只想那个 Tab (stFrame) 被阻止,怎么办?

更新:

我关心选项卡的代码是:

maingui.getContentPane().add(mainTabs);   //maingui is a JFrame
mainTabs.addTab("Editor", editorPanel);
Statistics st; //st extends JFrame
mainTabs.addTab("Statistics", null, st.getContentPane(), null);

最佳答案

模态仅适用于 Windows,因此您不能使用它来阻止选项卡,除非您彻底修改该机制(而且这是一个不平凡的机制)。

一种选择是在其 View 中的选项卡和组件上调用 setEnabled(false) - 在您的情况下框架的内容 Pane 。实现取决于当您在选项卡中执行某些操作时对话框是否弹出,无论您处于哪个选项卡或其他方式,它是否都会弹出。您可以在对话框的 setVisible 重写中调用 setEnabled - 这应该会为您提供所需的结果(这不是调用模态的地方,因此它的行为可能略有不同)某些情况)。

另一个选项是添加一些鼠标监听器来手动阻止对选项卡和\或其 View 中组件的点击。这更困惑,但更类似于模态的行为方式。

至于对话框的模式,这取决于您是否希望它阻止其父框架 - 其内容 Pane 显示在选项卡中的框架。请注意,选项卡和框架之间没有任何关系,就像您呈现的方式一样。

关于java - 更改 JDialogs 模式以仅阻止一个 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com