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

第一步:自定义一个类从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));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值