我使用JTabbedPane和JPanel在一个选项卡上显示JTable,在另一个选项卡上显示文本、下拉列表和jbutton。第一次它工作正常,但如果我最小化或切换屏幕到其他应用程序,并返回到我的应用程序,它显示正确的数据,但在JTabbedPane中的标签更改有一个严重的问题。现在选项卡屏幕变为蓝色,并且不显示数据。(我希望数据在那里,但不是重新绘制或刷新整个窗口)。现在,对于蓝屏,我执行了相同的过程,并在JTabbedPane中更改了选项卡,它显示了正确的数据。我使用了重绘,但它不起作用。需要帮助才能正确刷新窗口或选项卡。
发布于 2012-10-27 22:35:41
您使用的jdic.dll浏览器可能会出现问题。尝试使用任何其他浏览器重新加载选项卡式窗格。
发布于 2020-02-09 01:40:10
我猜这个“问题”是一个常青树。我假设,大多数人在使用错误的事件-方法实现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);
}
}仅此而已,没有其他必要了-- UI会自动更新。PS:这个问题与浏览器无关,因为这篇文章中的“最喜欢”的答案表明,这一切都是关于Java Swing GUI的。
https://stackoverflow.com/questions/10479881
复制相似问题