如何对把Jtable中某一行的列变成combobox形式

来源:互联网 发布:网络剧 受众群体 编辑:程序博客网 时间:2024/05/18 01:36

第一步:自定义一个类从JCombobox中继承并实现TableCellEditor 接口

 

package tabledemo;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.Component;
import java.util.EventObject;
import javax.swing.event.CellEditorListener;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class GenderEditor extends JComboBox implements TableCellEditor {
    public GenderEditor() {
        super();
        addItem("张三");

        addItem("萧六");

    }

    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row,
                                                 int column) {
        //      boolean isMale = ((Boolean) value).booleanValue();
        //      setSelectedIndex(isMale ? 0 : 1);
        return this;
    }

    public void cancelCellEditing() {
    }

    public boolean stopCellEditing() {
        return true;
    }

    public Object getCellEditorValue() {
        return null;
    }

    public boolean isCellEditable(EventObject anEvent) {
        return true;
    }

    public boolean shouldSelectCell(EventObject anEvent) {
        return false;
    }

    public void addCellEditorListener(CellEditorListener l) {
    }

    public void removeCellEditorListener(CellEditorListener l) {
    }

}

第二步:自定义一个类从JCombobox中继承并实现TableCellRenderer 接口

package tabledemo;

import javax.swing.JComboBox;
import javax.swing.table.TableCellRenderer;
import java.awt.Component;
import javax.swing.JTable;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class NameRenderer extends JComboBox implements TableCellRenderer {
    public NameRenderer() {
        super();
        addItem("张三");
         addItem("李四");
        addItem("王五");
       addItem("萧六");
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        this.setSelectedItem(value);
        return this;
    }

    private void jbInit() throws Exception {
    }
}
第三步:修改

    TableColumn tc1=jTable1.getColumnModel().getColumn(0);
        tc1.setCellRenderer(new NameRenderer());
        JComboBox namebox=new JComboBox();
        namebox.addItem("张三");
        namebox.addItem("李四");
        namebox.addItem("王五");
        namebox.addItem("萧六");
     //   tc1.setCellEditor(new DefaultCellEditor(namebox));
      tc1.setCellEditor(new GenderEditor());


        TableColumn tc=jTable1.getColumnModel().getColumn(1);
        JComboBox sexbox=new JComboBox();
        sexbox.addItem("男");
        sexbox.addItem("女");
        tc.setCellRenderer(new SexRenderer() );
        tc.setCellEditor(new DefaultCellEditor(sexbox));

 

原创粉丝点击