【问题标题】:Unable to refresh JTabbedPane无法刷新 JTabbedPane
【发布时间】:2012-05-15 19:56:41
【问题描述】:

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

【问题讨论】:

  • 我正在显示浏览器以显示 pdf 文件。

标签: swing jpanel jtabbedpane


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我猜这个“问题”是常青树。我认为,大多数人可能在错误的事件方法中实现 JTabbedPane 更改(删除和添加选项卡)时偶然发现了这个问题:

    例如,如果您想根据 JComboBox 中的选择删除一个选项卡并在选项卡式窗格中添加一个新选项卡,您必须将您的逻辑放入添加到此组合的 ItemListener 的“itemStateChanged”事件中-盒子。如果你把你的标签更改逻辑例如进入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 的。

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多