Swing/SliderInTableCell のバックアップの現在との差分(No.1)
TITLE:JTableのCellEditorとCellRendererにJSliderを使用する
Posted by aterai at 2010-02-08
JTableのCellEditorとCellRendererにJSliderを使用する
JTableのCellEditorとCellRendererにJSliderを使用するように設定します。- 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
を使用するように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
class SliderRenderer extends JSlider implements TableCellRenderer {
#spanend
public SliderRenderer() {
super();
setName("Table.cellRenderer");
setOpaque(true);
}
#spandel
**サンプルコード [#ydc20559]
#spanend
#spandel
#code{{
#spanend
#spandel
class SliderEditorRednerer extends AbstractCellEditor
#spanend
implements TableCellRenderer, TableCellEditor {
private final JSlider sliderEditor = new JSlider();
private final JSlider sliderRenderer = new JSlider();
public SliderEditorRednerer(final JTable table) {
sliderEditor.setOpaque(true);
sliderRenderer.setOpaque(true);
sliderEditor.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
@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());
setValue(i.intValue());
return this;
}
#spanadd
#spanend
//Overridden for performance reasons. ---->
@Override public void firePropertyChange(String p, boolean ov, boolean nv) {}
// ...
#spanadd
}
#spanend
#spanadd
#spanend
#spanadd
class SliderEditor extends JSlider implements TableCellEditor {
#spanend
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.getSelectedRow());
table.getModel().setValueAt(sliderEditor.getValue(), row, 0);
int row = table.convertRowIndexToModel(table.getEditingRow());
table.getModel().setValueAt(getValue(), row, 0);
table.getModel().setValueAt(getValue(), row, 1);
}
});
}
});
}
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
Integer i = (Integer)value;
sliderEditor.setBackground(table.getSelectionBackground());
sliderEditor.setValue(i.intValue());
return sliderEditor;
#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;
}
public Object getCellEditorValue() {
return Integer.valueOf(sliderEditor.getValue());
#spanadd
#spanend
@Override public Object getCellEditorValue() {
return Integer.valueOf(getValue());
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Integer i = (Integer)value;
sliderRenderer.setBackground(isSelected?table.getSelectionBackground():table.getBackground());
sliderRenderer.setValue(i.intValue());
return sliderRenderer;
}
#spanadd
#spanend
//Copied from AbstractCellEditor
// ...
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、1列目のセルエディタ、レンダラーにJSliderを使用するように設定しています。このスライダーの値を変更すると、同じ行の0列目の値も変更されるように、セルエディタにChangeListenerを追加しています。解説
-
0
列目- 編集不可
-
1
列目-
JSlider
を継承するセルエディタ、セルレンダラーを作成して設定 - このスライダーのセルエディタに
ChangeListener
を追加し、同じ行の0
列目の値と同期するよう設定
-