Each Row Editor (cell为下拉菜单)

来源:互联网 发布:数控编程培训洛阳 编辑:程序博客网 时间:2024/06/18 17:03
/* (swing1.1.1) *///package jp.gr.java_conf.tame.swing.examples;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import jp.gr.java_conf.tame.swing.table.*;/** * @version 1.1 09/09/99 */public class EachRowEditorExample extends JFrame {  public EachRowEditorExample(){    super("EachRow Editor Example");           DefaultTableModel dm = new DefaultTableModel();    dm.setDataVector(      new Object[][]{{"Name"  ,"MyName"},                     {"Gender","Male"}},      new Object[]{"Column1","Column2"});    JTable table = new JTable(dm);    JComboBox comboBox = new JComboBox();    comboBox.addItem("Male");    comboBox.addItem("Female");    comboBox.addComponentListener(new ComponentAdapter() {      public void componentShown(ComponentEvent e) {        final JComponent c = (JComponent)e.getSource();        SwingUtilities.invokeLater(new Runnable() {          public void run () {            c.requestFocus();            System.out.println(c);            if (c instanceof JComboBox) {              System.out.println("a");            }          }        });      }    });    EachRowEditor rowEditor = new EachRowEditor(table);    rowEditor.setEditorAt(1, new DefaultCellEditor(comboBox));    table.getColumn("Column2").setCellEditor(rowEditor);    JScrollPane scroll = new JScrollPane(table);    getContentPane().add( scroll , BorderLayout.CENTER);    setSize( 400, 100 );    setVisible(true);  }  public static void main(String[] args) {    EachRowEditorExample frame = new EachRowEditorExample();    frame.addWindowListener( new WindowAdapter() {      public void windowClosing( WindowEvent e ) {        System.exit(0);      }    });  }}  ==============================================================
/* (swing1.1.1) jfc#91 */package jp.gr.java_conf.tame.swing.table;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;/**  * each row TableCellEditor  *  * @version 1.1 09/09/99  * @author Nobuo Tamemasa  */public class EachRowEditor implements TableCellEditor {  protected Hashtable editors;  protected TableCellEditor editor, defaultEditor;  JTable table;  /**   * Constructs a EachRowEditor.   * create default editor    *   * @see TableCellEditor   * @see DefaultCellEditor   */   public EachRowEditor(JTable table) {    this.table = table;    editors = new Hashtable();    defaultEditor = new DefaultCellEditor(new JTextField());  }    /**   * @param row    table row   * @param editor table cell editor   */  public void setEditorAt(int row, TableCellEditor editor) {    editors.put(new Integer(row),editor);  }    public Component getTableCellEditorComponent(JTable table,      Object value, boolean isSelected, int row, int column) {    //editor = (TableCellEditor)editors.get(new Integer(row));    //if (editor == null) {    //  editor = defaultEditor;    //}    return editor.getTableCellEditorComponent(table,             value, isSelected, row, column);  }  public Object getCellEditorValue() {    return editor.getCellEditorValue();  }  public boolean stopCellEditing() {    return editor.stopCellEditing();  }  public void cancelCellEditing() {    editor.cancelCellEditing();  }  public boolean isCellEditable(EventObject anEvent) {    selectEditor((MouseEvent)anEvent);    return editor.isCellEditable(anEvent);  }  public void addCellEditorListener(CellEditorListener l) {    editor.addCellEditorListener(l);  }  public void removeCellEditorListener(CellEditorListener l) {    editor.removeCellEditorListener(l);  }  public boolean shouldSelectCell(EventObject anEvent) {    selectEditor((MouseEvent)anEvent);    return editor.shouldSelectCell(anEvent);  }    protected void selectEditor(MouseEvent e) {    int row;    if (e == null) {      row = table.getSelectionModel().getAnchorSelectionIndex();    } else {      row = table.rowAtPoint(e.getPoint());    }    editor = (TableCellEditor)editors.get(new Integer(row));    if (editor == null) {      editor = defaultEditor;    }  }}