概要

JTableが空の場合、表領域の中央に任意のJComponentが表示されるように設定します。

サンプルコード

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 all

解説

上記のサンプルでは、JTableに編集不可にしたJEditorPaneを追加し、以下のように設定して、常に中央にレイアウトされるように設定しています。

  • JTable#setFillsViewportHeight(true)として、JTableの高さがJViewportの高さより小さい場合、両者が同じ高さになるように設定
  • JTableのレイアウトをnullから、GridBagLayoutに変更
  • TableModelListener#tableChanged(...)イベントが発生したとき、モデルに行が残っているかどうかでJEditorPaneの表示非表示を切り替え

コメント

  • 大変素晴らしいです。参考にさせていただきました。 -- shuna
    • ありがとうございます。どうもです。 -- aterai