我正在使用带有JPanel的JTabbedPane在一个选项卡上显示JTable,在另一个选项卡上显示文本,下拉列表和jbutton。第一次运行正常,但是如果我最小化屏幕或将屏幕切换到其他应用程序并返回到我的应用程序,它将显示正确的数据,但是JTabbedPane中的制表符更改存在严重问题。现在选项卡屏幕变为蓝色并且不显示数据。(我希望有数据,但它不会重新绘制或刷新整个窗口)。现在,在蓝屏下,我执行相同的步骤,并在JTabbedPane中更改选项卡,它显示正确的数据。我使用了重新粉刷,但是不起作用。需要正确刷新窗口或标签的帮助。
可能是浏览器正在使用jdic.dll的问题。尝试使用任何其他浏览器重新加载选项卡式窗格。
我想这个“问题”是常绿的。我认为,大多数人在错误的事件方法中实现JTabbedPane更改(删除和添加选项卡)时可能会迷惑于此问题:
例如,如果要基于JComboBox中的选择删除选项卡并在选项卡式窗格中添加一个新选项卡,则必须将逻辑放入添加到此组合的ItemListener的'itemStateChanged'事件中,框。如果您使用tab-change-logic,例如到propertyChangeEvent(PropertyChangeListener)中,您做错了所有事情,并且总是为重新绘制/刷新选项卡式窗格UI元素弄乱了时间!
如果使用正确的事件方法,您甚至不必调用setVisible,重新验证或重新绘制。一切都会完美完成。
这是一个简单的示例:
@Override
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有关。