天天看點

如何對把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;

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;

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));