[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] HJTableでとりあえずPickListが使えるようにした




えんどうです。

>HGridは、セルにコンボボックスは表示して、
>選択するような機能もあるので、
>いろいろ試してください。

HGrid を使ったサンプルで、init() メソッドでの HDataSet の open() のあとに、

>      // HDataSet 構築
>      String query = "SELECT * FROM GOLF_SCORE";
>      dataset_.setDatabase(database_);
>      dataset_.setQuery(query);
>      dataset_.open();
      
      Column deptcode = (Column)dataset_.getColumn("PLAYER_ID");
      if (deptcode != null) {
        deptcode.setPickList("PLAYERS", "PLAYER_ID", "NAME");
        dataset_.setColumn("PLAYER_ID", deptcode);
      }

こんな処理を追加したら HGrid に HChoice が表示されました。

HJTable でもできないかと思って、とりあえずこんなコードを追加しました。

>  private void bindDataSet() {
>    if (dataSet != null) {
>      HTableModel tm = new HTableModel(dataSet);
>      setModel(tm);
>      TableColumnModel tcm = new DefaultTableColumnModel();
>
>      Graphics g = getGraphics();
>      if (g != null) {
>        Font f = getFont();
>        FontMetrics fm = g.getFontMetrics(f);
>        setRowHeight(fm.getHeight());
>        int cCount = tm.getColumnCount();
>        int rCount = Math.min(dataSet.getRowCount(), 10);
>        for (int c = 0; c < cCount; c++) {
>          String cn = tm.getColumnName(c);
>          int size = fm.stringWidth(cn);
>          for (int r = 0; r < rCount; r++) {
>            Object value = tm.getValueAt(r, c);
>            size = Math.max(size,
>              fm.stringWidth(String.valueOf(value)));
>          }
>
>          TableColumn tc = new TableColumn(c, size + 10);
>          tc.setHeaderValue(cn);
>          tcm.addColumn(tc);

          String name = dataSet.getColumn(c).getName();
          String tname = dataSet.getColumn(c).getPickListTableName();
          String cname = dataSet.getColumn(c).getPickListColumnName();
          String dname = dataSet.getColumn(c).getPickListDisplayColumnName();
          if ( tname != null && cname != null && dname != null ) {
            HJComboBox cb = new HJComboBox();
            cb.setPickListTableName(tname);
            cb.setPickListColumnName(cname);
            //cb.setPickListDisplayColumnName(dname);
            cb.setPickListDisplayColumnName(cname);//ColumnNameと一致しないとダメ
            cb.setColumnName(name);
            cb.setDataSet(dataSet);
            tc.setCellEditor( new DefaultCellEditor(cb) );
          }

>        }
>
>        setColumnModel(tcm);
>      }
>
>      g.dispose();
>
>      setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
>      setRowSelectionAllowed(false);
>      setCellSelectionEnabled(true);
>      setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
>      setColumnSelectionInterval(0, 0);
>      int rowIndex = dataSet.getRowIndex();
>      setRowSelectionInterval(rowIndex, rowIndex);
>      invalidate();
>      Container p = getParent();
>      if (p != null && p.isShowing()) {
>        p.validate();
>      }
>    }
>  }

pickListCulmnName と pickListDisplayColumnName が一致していないと
Exception が発生しますが、いちおう使えているので今日はこれまでにします。:o)
-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Japanese Only)