JTableが空の場合、中央にJComponentを表示する
Total: 6546
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTable
が空の場合、表領域の中央に任意のJComponent
が表示されるように設定します。
Screenshot

Advertisement
サンプルコード
JEditorPane hint = new JEditorPane("text/html", "<html><a href='dummy'>No data!</a></html>");
table.setFillsViewportHeight(true);
table.setLayout(new GridBagLayout());
table.add(hint);
model.addTableModelListener(new TableModelListener() {
@Override public void tableChanged(TableModelEvent e) {
DefaultTableModel model = (DefaultTableModel) e.getSource();
hint.setVisible(model.getRowCount() == 0);
}
});
View in GitHub: Java, Kotlin解説
JTable#setFillsViewportHeight(true)
としてJTable
の高さがJViewport
の高さより小さい場合、両者が同じ高さになるように設定JTable
のレイアウトをnull
からGridBagLayout
に変更して追加した編集不可のJEditorPane
が中央に配置されるよう設定TableModelListener#tableChanged(...)
イベントが発生したときモデルに行が存在するかどうかでJEditorPane
の表示・非表示を切り替える