Swing/CellEditorBorder のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CellEditorBorder へ行く。
- 1 (2005-08-22 (月) 08:08:31)
- 2 (2005-09-16 (金) 12:33:58)
- 3 (2006-02-27 (月) 15:31:19)
- 4 (2006-04-12 (水) 19:35:52)
- 5 (2007-02-15 (木) 16:30:37)
- 6 (2007-04-10 (火) 00:21:58)
- 7 (2008-06-20 (金) 13:36:20)
- 8 (2011-05-24 (火) 02:11:46)
- 9 (2013-03-27 (水) 16:36:20)
- 10 (2014-11-27 (木) 01:34:47)
- 11 (2015-01-22 (木) 21:17:10)
- 12 (2016-07-26 (火) 16:01:10)
- 13 (2017-09-27 (水) 19:06:59)
- 14 (2019-03-29 (金) 19:13:46)
- 15 (2021-01-07 (木) 16:47:00)
- 16 (2023-07-07 (金) 13:52:49)
- 17 (2023-11-16 (木) 14:54:55)
TITLE:CellEditorのBorderを変更
Posted by aterai at 2005-08-22
CellEditorのBorderを変更
JTableのCellEditorにBorderを設定します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
JTextField tf1 = new JTextField();
tf1.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
table.setDefaultEditor(Object.class, new DefaultCellEditor(tf1));
JTextField tf2 = new JTextField();
tf2.setHorizontalAlignment(JTextField.RIGHT);
tf2.setBorder(BorderFactory.createLineBorder(Color.GREEN, 2));
table.setDefaultEditor(Integer.class, new DefaultCellEditor(tf2) {
public boolean stopCellEditing() {
Object o = getCellEditorValue();
return (o==null)?false:super.stopCellEditing();
}
public Object getCellEditorValue() {
Object o = super.getCellEditorValue();
Integer iv;
try{
iv = Integer.valueOf(o.toString());
}catch(NumberFormatException nfe) {
iv = null;
}
return iv;
}
});
解説
サンプルでは、DefaultTableModel#getColumnClassメソッドをオーバーライドして0列目はInteger.classを返すようにしています。Integer.classの場合はBorderが緑、それ以外の場合(Object.class)は赤で描画するようなデフォルトエディタをそれぞれ指定しています。
以下のようにJTable#getColumnClassをオーバーライドしても同様です。
table = new JTable(sorter) {
public Class<?> getColumnClass(int column) {
if(column==0) {
return Integer.class;
}
return Object.class;
}
};
デフォルトレンダラーの設定にも、getColumnClassが返すクラスが影響するので、それぞれレンダラーを設定する必要があります。
TestRenderer tr = new TestRenderer();
table.setDefaultRenderer(Object.class, tr);
table.setDefaultRenderer(Integer.class, tr);