将jRadioButton添加到jTable中

将jRadioButton添加到jTable中,第1张

将jRadioButton添加到jTable中
  1. 如果要编辑表格单元格的值,则必须设置一个
    TableCellEditor
  2. 您应该
    JRadioButton
    在渲染器中创建一个单一文件,并在任何地方重复使用,这就是TableCellRenderer的目的
  3. 如果您不打电话
    super.getTableCellRendererComponent
    ,则不需要扩展
    DefaultTableCellRenderer
    ,只需执行即可
    TableCellRenderer

考虑阅读JTable教程,以更好地理解渲染器和编辑器的概念。

编辑:

这是有关如何进行此工作的示例。当然,您必须适应您的模型,但是您应该了解要点:

import java.awt.BorderLayout;import java.awt.Component;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import java.util.ArrayList;import java.util.List;import javax.swing.AbstractCellEditor;import javax.swing.Jframe;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingUtilities;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;import javax.swing.table.AbstractTableModel;import javax.swing.table.TableCellEditor;import javax.swing.table.TableCellRenderer;import javax.swing.table.TableColumn;public class TestTable {    public class RadioButtonCellEditorRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {        private JRadioButton radioButton;        public RadioButtonCellEditorRenderer() { this.radioButton = new JRadioButton(); radioButton.addActionListener(this); radioButton.setOpaque(false);        }        @Override        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { radioButton.setSelected(Boolean.TRUE.equals(value)); return radioButton;        }        @Override        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { radioButton.setSelected(Boolean.TRUE.equals(value)); return radioButton;        }        @Override        public void actionPerformed(ActionEvent e) { stopCellEditing();        }        @Override        public Object getCellEditorValue() { return radioButton.isSelected();        }    }    private Jframe f;    private JTable table;    private class MyObjectManager {        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);        private List<MyObject> objects = new ArrayList<TestTable.MyObject>();        public void addObject(MyObject object) { objects.add(object); object.setManager(this); propertyChangeSupport.firePropertyChange("objects", null, object);        }        public List<MyObject> getObjects() { return objects;        }        public void setAsSelected(MyObject myObject) { for (MyObject o : objects) {     o.setSelected(myObject == o); }        }    }    private class MyObject {        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);        private MyObjectManager manager;        private String value;        private boolean selected;        public MyObject(String value) { this.value = value;        }        public PropertyChangeSupport getPropertyChangeSupport() { return propertyChangeSupport;        }        public String getValue() { return value;        }        public void setValue(String value) { this.value = value; propertyChangeSupport.firePropertyChange("value", null, value);        }        public MyObjectManager getManager() { return manager;        }        public void setManager(MyObjectManager manager) { this.manager = manager; propertyChangeSupport.firePropertyChange("manager", null, manager);        }        public boolean isSelected() { return selected;        }        public void setSelected(boolean selected) { if (this.selected != selected) {     this.selected = selected;     if (selected) {         manager.setAsSelected(this);     }     propertyChangeSupport.firePropertyChange("selected", !selected, selected); }        }    }    protected void initUI() {        MyObjectManager manager = new MyObjectManager();        for (int i = 0; i < 200; i++) { MyObject object = new MyObject("Row " + (i + 1)); manager.addObject(object);        }        table = new JTable(new MyTableModel(manager));        table.setRowHeight(20);        TableColumn column = table.getColumnModel().getColumn(1);        column.setCellEditor(new RadioButtonCellEditorRenderer());        column.setCellRenderer(new RadioButtonCellEditorRenderer());        f = new Jframe();        f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        f.add(new JScrollPane(table), BorderLayout.CENTER);        f.pack();        f.setVisible(true);    }    public class MyTableModel extends AbstractTableModel implements PropertyChangeListener {        private final MyObjectManager manager;        public MyTableModel(MyObjectManager manager) { super(); this.manager = manager; manager.propertyChangeSupport.addPropertyChangeListener(this); for (MyObject object : manager.getObjects()) {     object.getPropertyChangeSupport().addPropertyChangeListener(this); }        }        @Override        public void propertyChange(PropertyChangeEvent evt) { if (evt.getSource() == manager) {     // OK, not the cleanest thing, just to get the gist of it.     if (evt.getPropertyName().equals("objects")) {         ((MyObject) evt.getNewValue()).getPropertyChangeSupport().addPropertyChangeListener(this);     }     fireTableDataChanged(); } else if (evt.getSource() instanceof MyObject) {     int index = manager.getObjects().indexOf(evt.getSource());     fireTableRowsUpdated(index, index); }        }        @Override        public int getColumnCount() { return 2;        }        @Override        public int getRowCount() { return manager.getObjects().size();        }        public MyObject getValueAt(int row) { return manager.getObjects().get(row);        }        @Override        public Object getValueAt(int rowIndex, int columnIndex) { switch (columnIndex) { case 0:     return getValueAt(rowIndex).getValue(); case 1:     return getValueAt(rowIndex).isSelected(); } return null;        }        @Override        public void setValueAt(Object value, int rowIndex, int columnIndex) { if (columnIndex == 1) {     getValueAt(rowIndex).setSelected(Boolean.TRUE.equals(value)); }        }        @Override        public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex == 1;        }        @Override        public Class<?> getColumnClass(int column) { switch (column) { case 0:     return String.class; case 1:     return Boolean.class; } return Object.class;        }        @Override        public String getColumnName(int column) { switch (column) { case 0:     return "Value"; case 1:     return "Selected"; } return null;        }    }    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     new TestTable().initUI(); }        });    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存