TITLE:JTableが空の場合、中央にJComponentを表示する

Posted by terai at 2010-09-13

JTableが空の場合、中央にJComponentを表示する

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

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

table.setFillsViewportHeight(true);
table.setLayout(new GridBagLayout());
table.add(hint);

解説

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

  • JTable#setFillsViewportHeight(true) として、JTableの高さがJViewportの高さより小さい場合、両者が同じ高さになるように設定
  • JTableのレイアウトを null から、GridBagLayout に変更

追加したJEditorPaneの表示非表示の切り替えは、ポップアップメニューで行の追加削除を行ったとき、JTable#getRowCount()==0かどうかで判断しています。

private class TablePopupMenu extends JPopupMenu {
  private final Action deleteAction = new AbstractAction("delete") {
    @Override public void actionPerformed(ActionEvent e) {
      JTable table = (JTable)getInvoker();
      DefaultTableModel model = (DefaultTableModel)table.getModel();
      int[] selection = table.getSelectedRows();
      if(selection==null || selection.length<=0) return;
      for(int i=selection.length-1;i>=0;i--) {
        model.removeRow(table.convertRowIndexToModel(selection[i]));
      }
      if(table.getRowCount()==0) editor.setVisible(true);
    }
  };
//......

コメント

  • 大変素晴らしいです。参考にさせていただきました。 -- shuna