我正在使用 JTabbedPane 和 JPanel 在一个选项卡上显示 JTable,在另一个选项卡上显示文本、下拉菜单和 jbutton。第一次它工作正常,但如果我最小化或切换屏幕到其他应用程序并返回到我的应用程序,它会正确显示数据,但 JTabbedPane 中的选项卡更改存在严重问题。现在选项卡屏幕变为蓝色并且不显示数据。(我希望数据在那里,但它不是重新绘制或刷新完整的窗口)。现在在蓝屏的情况下,我执行相同的程序并更改 JTabbedPane 中的选项卡,它显示正确的数据。我使用了重绘,但它不起作用。需要帮助才能正确刷新窗口或选项卡。
问问题
258 次
2 回答
1
您使用 jdic.dll 可能是浏览器的问题。尝试使用任何其他浏览器重新加载选项卡式窗格。
于 2012-10-27T14:35:41.037 回答
0
我想这个“问题”是常青树。我假设,大多数人可能在错误的事件方法中实现 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);
}
}
仅此而已,无需其他任何东西 - UI 将自行更新。PS:这个问题与浏览器无关,正如这个线程中“喜欢”的答案所建议的那样,这都是关于 Java Swing GUI 的。
于 2020-02-08T17:40:10.347 回答