Java 如何在JTabbedPane的一个窗格上冻结?
在某些情况下,我需要一个JTabbedPane保留在一个窗格上,直到用户提供某些信息。本质上,当这种情况发生时,我需要当前窗格成为模态Java 如何在JTabbedPane的一个窗格上冻结?,java,swing,Java,Swing,在某些情况下,我需要一个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)