TITLE:TableColumnの幅を比率で設定

Posted by aterai at 2005-11-28

TableColumnの幅を比率で設定

TableColumnの幅を比率で設定します。

  • &jnlp;
  • &jar;
  • &zip;
HeaderRatio.png

サンプルコード

private void setTableHeaderColumnRaito() {
  int[] list = getWidthRaitoArray();
  //System.out.println("a: "+table.getColumnModel().getTotalColumnWidth());
  //System.out.println("b: "+table.getSize().width);
  int total = table.getSize().width; //table.getColumnModel().getTotalColumnWidth();
  int raito = total/getRaitoTotal(list);
  for(int i=0;i<table.getColumnModel().getColumnCount()-1;i++) {
    TableColumn col = table.getColumnModel().getColumn(i);
    int colwidth = list[i]*raito;
    col.setPreferredWidth(colwidth); //col.setMaxWidth(colwidth);
    total -= colwidth;
  }
  table.getColumnModel().getColumn(
    table.getColumnModel().getColumnCount()-1).setPreferredWidth(total);
  //table.getColumnModel().getColumnCount()-1).setMaxWidth(total);
  table.revalidate();
}

private void setRaito() {
  int[] list = getWidthRaitoArray();
  int total = getTotalColumnWidth(table);
  int raito = total/getRaitoTotal(table, list);
  for(int i=0;i<table.getColumnModel().getColumnCount()-1;i++) {
    TableColumn col = table.getColumnModel().getColumn(i);
    int colwidth = list[i]*raito;
    col.setMaxWidth(colwidth);
    total = total - colwidth;
  }
  //最後のカラムで誤差を吸収
  table.getColumnModel().getColumn(
    table.getColumnModel().getColumnCount()-1).setMaxWidth(total);
  table.revalidate();
}

解説

上記のサンプルでは、JTextFieldにコロン区切りで入力した比率に従って、ヘッダカラムの幅を調整するようになっています。

JCheckBoxを選択している場合、JScrollPaneに追加したComponentListenerで、リサイズされる毎にカラムの幅を設定し直しているので、フレームのサイズを変更してもカラムの比率は保持されます。

コメント