📄 multicomponenttable.java
字号:
/* (swing1.1beta3) */package tame.examples;import java.awt.Component;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.EventObject;import javax.swing.DefaultCellEditor;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.event.CellEditorListener;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellEditor;/**@author Nobuo Tamemasa@version 1.0 11/09/98*/public class MultiComponentTable extends JFrame { public MultiComponentTable(){ super("MultiComponent Table"); DefaultTableModel dm = new DefaultTableModel() { public boolean isCellEditable(int row, int column) { if (column == 0) { return true; } return false; } }; dm.setDataVector( new Object[][]{ {new ComboString("true") ,"ComboString","JLabel" ,"JComboBox"}, {new ComboString("false"),"ComboString","JLabel" ,"JComboBox"}, {new Boolean(true) ,"Boolean" ,"JCheckBox","JCheckBox"}, {new Boolean(false) ,"Boolean" ,"JCheckBox","JCheckBox"}, {"true" ,"String" ,"JLabel" ,"JTextField"}, {"false" ,"String" ,"JLabel" ,"JTextField"}}, new Object[]{"Component","Data","Renderer","Editor"}); JTable table = new JTable(dm); table.getColumn("Component").setCellRenderer( new MultiRenderer()); table.getColumn("Component").setCellEditor( new MultiEditor()); JScrollPane scroll = new JScrollPane(table); getContentPane().add( scroll ); setSize( 400, 160 ); setVisible(true); } public static void main(String[] args) { MultiComponentTable frame = new MultiComponentTable(); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); }}/**@author Nobuo Tamemasa@version 1.0 11/09/98*/class ComboString { String str; ComboString(String str) { this.str = str; } public String toString() { return str; }}/**@author Nobuo Tamemasa@version 1.0 11/09/98*/class MultiRenderer extends DefaultTableCellRenderer { JCheckBox checkBox = new JCheckBox(); public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { // Boolean checkBox.setSelected(((Boolean)value).booleanValue()); checkBox.setHorizontalAlignment(JLabel.CENTER); return checkBox; } String str = (value == null) ? "" : value.toString(); return super.getTableCellRendererComponent( table,str,isSelected,hasFocus,row,column); }}/**@author Nobuo Tamemasa@version 1.0 11/09/98*/class MultiEditor implements TableCellEditor { private final static int COMBO = 0; private final static int BOOLEAN = 1; private final static int STRING = 2; private final static int NUM_EDITOR = 3; DefaultCellEditor[] cellEditors; JComboBox comboBox; int flg; public MultiEditor() { cellEditors = new DefaultCellEditor[NUM_EDITOR]; comboBox = new JComboBox(); comboBox.addItem("true"); comboBox.addItem("false"); cellEditors[COMBO] = new DefaultCellEditor(comboBox); JCheckBox checkBox = new JCheckBox(); //checkBox.setOpaque( true ); checkBox.setHorizontalAlignment(JLabel.CENTER); cellEditors[BOOLEAN] = new DefaultCellEditor(checkBox); JTextField textField = new JTextField(); cellEditors[STRING] = new DefaultCellEditor(textField); flg = NUM_EDITOR; // nobody } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value instanceof ComboString) { // ComboString flg = COMBO; String str = (value == null) ? "" : value.toString(); return cellEditors[COMBO].getTableCellEditorComponent( table, str, isSelected, row, column); } else if (value instanceof Boolean) { // Boolean flg = BOOLEAN; return cellEditors[BOOLEAN].getTableCellEditorComponent( table, value, isSelected, row, column); } else if (value instanceof String) { // String flg = STRING; return cellEditors[STRING].getTableCellEditorComponent( table, value, isSelected, row, column); } return null; } public Object getCellEditorValue() { switch (flg) { case COMBO: String str = (String)comboBox.getSelectedItem(); return new ComboString(str); case BOOLEAN: case STRING: return cellEditors[flg].getCellEditorValue(); default: return null; } } public Component getComponent() { return cellEditors[flg].getComponent(); } public boolean stopCellEditing() { return cellEditors[flg].stopCellEditing(); } public void cancelCellEditing() { cellEditors[flg].cancelCellEditing(); } public boolean isCellEditable(EventObject anEvent) { return cellEditors[flg].isCellEditable(anEvent); } public boolean shouldSelectCell(EventObject anEvent) { return cellEditors[flg].shouldSelectCell(anEvent); } public void addCellEditorListener(CellEditorListener l) { cellEditors[flg].addCellEditorListener(l); } public void removeCellEditorListener(CellEditorListener l) { cellEditors[flg].removeCellEditorListener(l); } public void setClickCountToStart(int n) { cellEditors[flg].setClickCountToStart(n); } public int getClickCountToStart() { return cellEditors[flg].getClickCountToStart(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -