Swing/SliderInTableCell のバックアップの現在との差分(No.9)
- category: swing folder: SliderInTableCell title: JTableのCellEditorとCellRendererにJSliderを使用する tags: [JTable, TableCellEditor, TableCellRenderer, JSlider, ChangeListener] author: aterai pubdate: 2010-02-08T14:27:32+09:00 description: JTableのCellEditorとCellRendererにJSliderを使用するように設定します。 image:
概要
概要
JTable
のCellEditor
とCellRenderer
にJSlider
を使用するように設定します。
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
class SliderRednerer extends JSlider implements TableCellRenderer {
#spanend
public SliderRednerer() {
#spanadd
class SliderRenderer extends JSlider implements TableCellRenderer {
#spanend
public SliderRenderer() {
super();
setName("Table.cellRenderer");
setOpaque(true);
}
@Override public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int column) {
#spanadd
#spanend
@Override public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
Integer i = (Integer) value;
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setBackground(isSelected ? table.getSelectionBackground()
: table.getBackground());
setValue(i.intValue());
return this;
}
#spanadd
#spanend
//Overridden for performance reasons. ---->
@Override public void firePropertyChange(String p, boolean ov, boolean nv) {}
#spandel
//......
#spanend
#spandel
View in GitHub: Java, Kotlin // ...
}
#spanend
class SliderEditor extends JSlider implements TableCellEditor {
public SliderEditor(final JTable table) {
super();
setOpaque(true);
addChangeListener(new ChangeListener() {
@Override public void stateChanged(ChangeEvent e) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
int row = table.convertRowIndexToModel(table.getEditingRow());
table.getModel().setValueAt(getValue(), row, 0);
table.getModel().setValueAt(getValue(), row, 1);
}
});
}
});
}
#spanadd
#spanend
@Override public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
Integer i = (Integer) value;
this.setBackground(table.getSelectionBackground());
this.setValue(i.intValue());
return this;
}
#spanadd
#spanend
@Override public Object getCellEditorValue() {
return Integer.valueOf(getValue());
}
//Copied from AbstractCellEditor
#spandel
//......
#spanend
#spanadd
#spanend
//Copied from AbstractCellEditor
// ...
#spanadd
}
#spanend
解説
上記のサンプルでは、1
列目のセルエディタ、レンダラーにJSlider
を使用するように設定しています。このスライダーの値を変更すると、同じ行の0
列目の値も変更されるように、セルエディタにChangeListener
を追加しています。
解説
-
0
列目- 編集不可
-
1
列目-
JSlider
を継承するセルエディタ、セルレンダラーを作成して設定 - このスライダーのセルエディタに
ChangeListener
を追加し、同じ行の0
列目の値と同期するよう設定
-
コメント
- メモ: Bug ID: 6348946 JSlider's thumb moves in the wrong direction when used as a JTable cell editor. via. Swing - How to insert a JComponent into a cell of JTable -- aterai
参考リンク
- CellEditorをJSpinnerにして日付を変更
- Bug ID: 6348946 JSlider's thumb moves in the wrong direction when used as a JTable cell editor.