[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)