Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JTabbedPane的一个窗格上冻结?_Java_Swing - Fatal编程技术网

Java 如何在JTabbedPane的一个窗格上冻结?

Java 如何在JTabbedPane的一个窗格上冻结?,java,swing,Java,Swing,在某些情况下,我需要一个JTabbedPane保留在一个窗格上,直到用户提供某些信息。本质上,当这种情况发生时,我需要当前窗格成为模态 我如何实现这一点?我在想,当窗格更改时,我可以捕获触发的任何事件,并重置回我想继续使用的窗格。但我担心这不太正确,根据事件实际触发的时间,在调用方法将窗格设置为我想要的窗格或其他类似的竞争条件后,将发生到新窗格的转换。有更好的办法吗?有什么方法可以让这种方法起作用吗?我建议将其他选项卡设置为禁用。这有一个积极的效果,即向用户提供他们无法从选项卡中单击的反馈。否则

在某些情况下,我需要一个JTabbedPane保留在一个窗格上,直到用户提供某些信息。本质上,当这种情况发生时,我需要当前窗格成为模态


我如何实现这一点?我在想,当窗格更改时,我可以捕获触发的任何事件,并重置回我想继续使用的窗格。但我担心这不太正确,根据事件实际触发的时间,在调用方法将窗格设置为我想要的窗格或其他类似的竞争条件后,将发生到新窗格的转换。有更好的办法吗?有什么方法可以让这种方法起作用吗?

我建议将其他选项卡设置为禁用。这有一个积极的效果,即向用户提供他们无法从选项卡中单击的反馈。否则,他们可能会疯狂地点击,想知道为什么它不会让他们离开账单


只需在所需字段完成后再次将其设置为启用。

只需禁用JTabbedPane:

pane.setEnabled(false);
如果所有字段都正确设置(或任何条件),请启用它。

您可以使用a和JPanels来执行您想要的操作,而不使用JTabbedPanes。由于您需要使用选项卡式窗格,因此我建议,一旦达到要强制用户停留在该选项卡上的条件,使用将该选项卡设置为选中的选项卡

setTabComponentAt(int index, Component component) 

设置一个标志,指示用户在完成您希望他们执行的任何操作之前不能继续,并使用
setEnabledAt(int-index,boolean-enabled)禁用所有其他选项卡
。 一旦用户完成了继续所需的操作,则相应地设置标志并重新启用其他选项卡


我没有时间尝试这个解决方案,但我认为它应该会起作用。

你不能使用JDialog或JOptionPane?@ChadNC,我考虑过这一点,实际上我更喜欢这个选项,但在这种情况下,用户需要在这个窗格上采取措施来改变环境,以消除我需要冻结的条件。通过使用该窗格上的控件,他们可以通过多种方式缓解这种情况。如果我弹出一个模态对话框,它们将无法访问所有这些控件。同时,还可以让用户非常清楚地知道它们需要修复什么。我想不出还有什么比被困在模态上更令人沮丧的了——任何正在等待输入的东西我都不知道如何输入。@Twenty miles是的,我通常突出显示红色或黄色的字段。。这是我公认的答案,但我使用了所有其他答案的片段;特别是ChadNC让我加入了setEnabledAt()方法(尽管我非常擅长阅读JavaDocs,但我自己似乎找不到这个方法),Carlos的解决方案几乎对我起到了作用,是一个很好的权宜之计,可以让基本概念发挥作用。非常酷!稍微关闭,因为它会使当前选项卡变灰,但当前窗格会保持活动状态,因此可以正常工作。不过,如果我能正确地解决问题,我想我会尝试禁用每个单独的选项卡。@skipophy-如果你不想灰显当前选项卡,可以使用@Chris solutions:use
JTabbedPane.setEnablebAt(int,boolean)
禁用当前选项卡以外的每个选项卡。
setSelectedIndex(int index)