使用JRadioButton作为单元格渲染器停止JTable中的单元格编辑
更新
在鼠标点击表单元格仍然处于编辑模式并且JRadioButton处于不良状态之后的代码中。 我必须按ESC键以转义编辑模式,并让渲染器在单元格中呈现JRadioButton的正确状态。 有人知道我需要在代码中实现以让单元编辑器释放编辑模式吗?
public class Test extends JFrame {
JTable myTable = new JTable();
public Test() {
this.setSize(150, 150);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
System.exit(0);
}
});
setVisible(true);
myTable.setModel(new MyModel());
myTable.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());
myTable.getColumnModel().getColumn(0).setCellEditor(new MyEditor());
myTable.setTableHeader(null);
this.add(myTable);
}
public static void main(String[] args) {
Test test = new Test();
}
class MyModel extends AbstractTableModel {
Object myModelData[];
public MyModel() {
List list = new ArrayList();
list.add(new MyModelData("item 1", new Boolean(true)));
list.add(new MyModelData("item 2", new Boolean(false)));
list.add(new MyModelData("item 3", new Boolean(true)));
myModelData = list.toArray();
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public String getColumnName(int column) {
return "";
}
@Override
public int getRowCount() {
return myModelData.length;
}
@Override
public Object getValueAt(int row, int column) {
return myModelData[row];
}
@Override
public Class getColumnClass(int column) {
return JRadioButton.class;
}
@Override
public void setValueAt(Object value, int row, int column) {
myModelData[row] = value;
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
}
class MyModelData {
private String text;
private Boolean status;
public MyModelData(String text, Boolean status) {
this.text = text;
this.status = status;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
}
class MyRenderer extends JRadioButton implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable t, Object v, boolean s, boolean f, int r, int c) {
this.setSelected(((MyModelData) v).getStatus());
this.setText(((MyModelData) v).getText() + " rendered");
return this;
}
}
public class MyEditor extends JRadioButton implements TableCellEditor {
@Override
public Component getTableCellEditorComponent(JTable t, Object v, boolean s, int r, int c) {
((MyModelData) v).setStatus(!((MyModelData) v).getStatus());
this.setText(((MyModelData) v).getText() + " in edit mode");
return this;
}
@Override
public Object getCellEditorValue() {
return null;
}
@Override
public boolean isCellEditable(EventObject event) {
return true;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
@Override
public boolean stopCellEditing() {
return true;
}
@Override
public void cancelCellEditing() {
}
@Override
public void addCellEditorListener(CellEditorListener l) {
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
}
}
}
链接地址: http://www.djcxy.com/p/8609.html
上一篇: Stop cell editing in JTable with JRadioButton as cell renderers
下一篇: How can i format xml input for restful web service and invoke the service
