Each Row Editor (cell为下拉菜单)

/* (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;
    }
  }
}
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值