【问题标题】:Bringing tab to front in JTabbedPane在 JTabbedPane 中将选项卡置于最前面
【发布时间】:2009-08-05 20:45:46
【问题描述】:

当我在 JTabbedPane 对象上使用 setSelectedComponentsetSelectedIndex 时,面板总是出现在我的 UI 中。但是,有时与面板关联的选项卡仍然隐藏。换句话说,选项卡不会滚动到选项卡式窗格的可见部分。

我该如何解决这个问题?我已经尝试过俗气的选择一个索引,然后选择所需的索引,以及其他几个更优雅的东西,但是啊!!

如果可以,请帮助我。

谢谢, 托德

【问题讨论】:

    标签: java swing jtabbedpane


    【解决方案1】:

    我认为您的电话不是在 EDT 上完成的。用SwingUtilities.invokeLater包裹起来

    【讨论】:

    • 顺便说一句,我是否需要包装 ListCellRenderer 中的类似代码?或者对于列表可能在哪里的问题太模糊了?
    • 任何与 UI 相关的代码(甚至是模型)都必须在 EDT 上运行。您可以使用 SwingUtilities.isEventDispatchThread() 检查您是否在上面
    • 渲染器用于绘制组件,因此它们的代码已经在 EDT 上运行。但是您可以检查以确保
    • Eugene,之前引用的代码,现在使用 invokeLater 已经开始出现和之前一样的问题。有什么想法吗?
    • 顺便说一句,我已经将它直接包装在 Runnable 中用于 invokeLater,以及使用下面的 Devon 模式 - 没有区别。所以,它必须在 EDT 上。
    【解决方案2】:

    如果您有一个方法可以更改摆动组件或其模型,则可以使用这里的模式,因此必须在 EDT 上调用,但可以从后台线程调用。这确保 func always 在 EDT 上运行:

    void func(final Type1 arg1, final Type2 arg2) {
    
        if (!SwingUtilities.isEventDispatchThread()) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    func(arg1, arg2);
                }
            });
            return;
        }
        // method code goes here
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多