/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.component.editor; import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JSlider; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.table.TableCellEditor; import javax.swing.tree.TreeCellEditor; /** * @author Stephane */ public class SliderCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor, ChangeListener { /** * */ private static final long serialVersionUID = -4946926120641246542L; private JSlider slider; /** * internals */ private JTable table; private int row; private int column; boolean liveUpdate; /** * Create a SliderEditor for JTable or JTree. * * @param liveUpdate * set to true if you want live update on slider change */ public SliderCellEditor(boolean liveUpdate) { slider = new JSlider(0, 1000); slider.addChangeListener(this); slider.setRequestFocusEnabled(false); table = null; this.liveUpdate = liveUpdate; } @Override public Object getCellEditorValue() { return Integer.valueOf(slider.getValue()); } @Override public void stateChanged(ChangeEvent e) { if (slider.getValueIsAdjusting()) { // not very elegant but needed for live update on JTable if (liveUpdate && (table != null)) { final int value = slider.getValue(); if (((Integer) table.getValueAt(row, column)).intValue() != value) table.setValueAt(Integer.valueOf(value), row, column); } } else stopCellEditing(); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { this.table = table; this.row = row; this.column = column; final int intValue = ((Integer) value).intValue(); if (slider.getValue() != intValue) slider.setValue(intValue); slider.invalidate(); return slider; } @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { final int intValue = ((Integer) value).intValue(); if (slider.getValue() != intValue) slider.setValue(intValue); return slider; } }