JTabbedPaneとJPanelを使用して、一方のタブにJTableを表示し、もう一方のタブにテキスト、ドロップダウン、jbuttonを表示しています。初めては正常に動作していますが、画面を最小化するか、他のアプリケーションに切り替えてアプリケーションに戻ると、データは正しく表示されますが、JTabbedPaneのタブ変更に深刻な問題があります。これで、タブ画面が青色になり、データが表示されなくなります(データが存在することを願っていますが、ウィンドウ全体を再描画または更新していません)。ブルースクリーンで同じ手順を実行し、JTabbedPaneのタブを変更すると正しいデータが表示されます。再ペイントを使用しましたが、機能しません。ウィンドウまたはタブを正しく更新するために必要なヘルプ。
2 に答える
jdic.dllを使用しているブラウザに問題がある可能性があります。他のブラウザを使用して、タブ付きペインをリロードしてみてください。
この「問題」は常緑樹だと思います。おそらく、JTabbedPaneの変更(タブの削除と追加)を間違ったイベントメソッドで実装するときに、ほとんどの人がこの問題に遭遇すると思います。
たとえば、タブを削除し、JComboBoxでの選択に基づいてタブ付きペインに新しいタブを追加する場合は、ロジックを「itemStateChanged」(このコンボボックスに追加されたItemListenerのイベント)に配置する必要があります。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:このスレッドの「お気に入り」の回答で示唆されているように、この問題はブラウザとは何の関係もありません。すべてはJavaSwingGUIに関するものです。