无法刷新JTabbedPane

时间:2012-05-07 09:43:53

标签: swing jpanel jtabbedpane

我正在使用带有JPanel的JTabbedPane在一个选项卡上显示JTable,在其他选项卡上显示文本,下拉列表和jbutton。 第一次它工作正常,但如果我最小化或切换屏幕到其他应用程序并返回到我的应用程序它显示数据正确,但JTabbedPane中的选项卡更改严重问题。现在标签屏幕变为蓝色并且不显示数据。(我希望数据存在,但它不是重新绘制或刷新完整的窗口)。 现在使用蓝屏我执行相同的过程并在JTabbedPane中更改选项卡,它显示正确的数据。 我使用重绘但它不起作用。 需要帮助才能正确刷新窗口或标签。

2 个答案:

答案 0 :(得分:1)

您可能正在使用jdic.dll的浏览器问题。尝试使用任何其他浏览器重新加载选项卡式窗格。

答案 1 :(得分:0)

我猜这个“问题”是常绿的。我认为,大多数人在错误的事件方法中实现JTabbedPane更改(删除和添加选项卡)时可能会迷惑于此问题:

例如,如果要删除选项卡并根据JComboBox中的选择在选项卡式窗格中添加一个新选项卡,则必须将逻辑放入添加到此组合的ItemListener的“ itemStateChanged”事件中-框。如果您使用tab-change-logic,例如放入propertyChangeEvent(PropertyChangeListener)中,您做错了所有事情,并且总是为重新绘制/刷新选项卡式窗格UI元素而搞乱了时间!

如果使用正确的事件方法,则甚至不必调用setVisible,重新验证或重新绘制。一切都会完美地完成。

这是一个简单的例子:

JComboBox<String> c_editor = new javax.swing.JComboBox<String>();

c_editor.setModel(new javax.swing.DefaultComboBoxModel<>(
            new String[] { "CSV", "EXCEL", "HTML" }
        ));

c_editor.addItemListener(new java.awt.event.ItemListener() {
        public void itemStateChanged(java.awt.event.ItemEvent evt) {
            c_editorItemStateChanged(evt);
        }
    });

...

protected void c_editorItemStateChanged(ItemEvent evt) {

    // get the value selected in the combo box
    final String val = c_editor.getSelectedItem().toString();

    if (tabbed_pane.getTabCount() > 1) {
        // remove the panel which is at position 1
        tabbed_pane.removeTabAt(1);
    }

    if (val.equals("CSV")) {
        // add the panel for viewing CSV files
        tabbed_pane.addTab("CSV Editor", p_csv);
    } else if (val.equals("EXCEL")) {
        // add the panel for viewing Excel files
        tabbed_pane.addTab("Excel Editor", p_excel);
    } else if (val.equals("HTML")) {
        // add the panel for viewing HTML files
        tabbed_pane.addTab("HTML Editor", p_html);
    }
}

仅此而已,不需要其他任何操作-用户界面将自行更新。 PS:此问题与该线程中“最喜欢的”答案所建议的浏览器无关,全部与Java Swing GUI有关。