Java 删除combobox作为jtable单元格的单元格编辑器

Java 删除combobox作为jtable单元格的单元格编辑器,java,swing,jtable,jcombobox,tablecelleditor,Java,Swing,Jtable,Jcombobox,Tablecelleditor,我制作了一个组合框作为列的单元格编辑器。我希望在创建新行时,该列中的单元格不应使用combobox作为单元格编辑器,而应保留JTextField作为单元格编辑器。以下是我迄今为止所做的工作 addRow(mainWindow.salesTable); final TableColumn items = mainWindow.salesTable.getColumnModel().getColumn(0); final JTextField tfield = new JTextF

我制作了一个组合框作为列的单元格编辑器。我希望在创建新行时,该列中的单元格不应使用combobox作为单元格编辑器,而应保留JTextField作为单元格编辑器。以下是我迄今为止所做的工作

 addRow(mainWindow.salesTable);
    final TableColumn items = mainWindow.salesTable.getColumnModel().getColumn(0);
    final JTextField tfield = new JTextField();
  DefaultCellEditor editorqty = new DefaultCellEditor(tfield);
  items.setCellEditor(editorqty);

   private static void addRow(JTable table) {
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    Vector row = new Vector();
    row.add("");
    row.add("");
    row.add("");
    row.add("");
    row.add("");
    row.add("");
    row.add("");
    row.add("");
    model.addRow(row);
}

覆盖jtable的
getCellEditor(…)
方法是一种方法:

import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class TableComboBoxByRow extends JPanel
{
    List<String[]> editorData = new ArrayList<String[]>(3);

    public TableComboBoxByRow()
    {
        setLayout( new BorderLayout() );

        // Create the editorData to be used for each row

        editorData.add( new String[]{ "Red", "Blue", "Green" } );
        editorData.add( new String[]{ "Circle", "Square", "Triangle" } );
        editorData.add( new String[]{ "Apple", "Orange", "Banana" } );

        //  Create the table with default data

        Object[][] data =
        {
            {"Color", "Red"},
            {"Shape", "Square"},
            {"Fruit", "Banana"},
            {"Plain", "Text"}
        };
        String[] columnNames = {"Type","Value"};

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model)
        {
            //  Determine editor to be used by row
            public TableCellEditor getCellEditor(int row, int column)
            {
                int modelColumn = convertColumnIndexToModel( column );

                if (modelColumn == 1 && row < 3)
                {
                    JComboBox<String> comboBox1 = new JComboBox<String>( editorData.get(row));
                    return new DefaultCellEditor( comboBox1 );
                }
                else
                    return super.getCellEditor(row, column);
            }
        };

        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Table Combo Box by Row");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TableComboBoxByRow() );
        frame.setSize(200, 200);
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
import java.awt.*;
导入java.util.List;
导入java.util.ArrayList;
导入javax.swing.*;
导入javax.swing.border.*;
导入javax.swing.table.*;
公共类TableComboBoxByRow扩展了JPanel
{
List editorData=new ArrayList(3);
公共表ComboxBoxByRow()
{
setLayout(新的BorderLayout());
//创建要用于每行的editorData
add(新字符串[]{“红色”、“蓝色”、“绿色”});
add(新字符串[]{“圆”、“正方形”、“三角形”});
add(新字符串[]{“Apple”、“Orange”、“Banana”});
//使用默认数据创建表
对象[][]数据=
{
{“颜色”,“红色”},
{“形状”,“正方形”},
{“水果”,“香蕉”},
{“纯”、“文本”}
};
字符串[]columnNames={“类型”,“值”};
DefaultTableModel=新的DefaultTableModel(数据、列名称);
JTable表格=新JTable(型号)
{
//确定行要使用的编辑器
公共表CellEditor getCellEditor(int行,int列)
{
int modelColumn=convertColumnIndexToModel(列);
if(modelColumn==1&&row<3)
{
JComboBox comboBox1=新的JComboBox(editorData.get(row));
返回新的DefaultCellEditor(comboBox1);
}
其他的
返回super.getCellEditor(行、列);
}
};
JScrollPane scrollPane=新的JScrollPane(表);
添加(滚动窗格);
}
私有静态void createAndShowUI()
{
JFrame frame=新JFrame(“按行排列的表格组合框”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(新的tableComboxByRow());
框架。设置尺寸(200200);
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args)
{
invokeLater(新的Runnable()
{
公开募捐
{
createAndShowUI();
}
});
}
}

JTextField
DefaultCellEditor
的默认值,要成功阅读
Oracle教程
-
如何使用表格
,part
使用组合框作为编辑器
对于工作代码示例扫描您动态删除组合框作为该列的编辑器,以便下一行不使用组合框作为编辑器?在这一部分“使用组合框作为编辑器‘fom’Oracle教程-如何使用表”中,它展示了如何使用组合框作为单元格编辑器,而不是作为单元格编辑器删除(我确信不需要删除编辑器),“XxxCellEditor”有,知道JTable中的行和列坐标,这些行和列的值不是常量,可以访问,可设置、可缩放
ColumnModel
维护有关应用于给定列的渲染器和编辑器的信息,这将解决您的问题。设计的期望是每个列只有一个渲染器和编辑器…我现在明白了。这意味着我必须在一个临时数组中复制数据,然后在一个符合我的规范的jtable中再次加载它。这就是我所寻找的。谢谢