Swing/CellEditorBorder のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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を変更
CellEditorのBorderを変更
Posted by terai at 2005-08-22
概要
JTableのCellEditorにBorderを設定します。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
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);