当前位置: 首页 > 知识库问答 >
问题:

将JComboBox添加到JTable

夏飞鹏
2023-03-14

我正在Java创建一个JTable

代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class sinX extends JFrame {
private JTable table;
private DefaultTableModel model;
private Object[][] data;
private String[] columnNames;
private JButton button;
JComboBox comboBox;
    public sinX() {
    comboBox = new JComboBox();
    setTitle("Programming Languages");
    data = new Object[][]{{"C","Dennis Ritchie",1972,false},{"C++","Bjarne Stroustrup",1983,true},
            {"Python","Guido van Rossum",1991,false},{"Java","James Gosling",1995,true},{
            "JavaScript","Brendan Eich",1995,true},{"C#","Anders Hejlsberg",2001,false},
            {"Scala","Martin Odersky",2003,true}};
    columnNames = new String[] {"Language","Author","Year","Check Box"};
    //model = new DefaultTableModel(data, columnNames);
    //table = new JTable(model);
    //table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    final Class[] columnClass = new Class[] {
            String.class, String.class, Integer.class, Boolean.class
    };
    //create table model with data
    DefaultTableModel model = new DefaultTableModel(data, columnNames) {
        @Override
        public boolean isCellEditable(int row, int column)
        {
            return false;
        }
        @Override
        public Class<?> getColumnClass(int columnIndex)
        {
            return columnClass[columnIndex];
        }
    };
    table = new JTable(model);
    table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    button = new JButton("Remove");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            // check for selected row first
            if(table.getSelectedRow() != -1) {
                // remove selected row from the model
                model.removeRow(table.getSelectedRow());
                JOptionPane.showMessageDialog(null, "Selected row deleted successfully");
            }
        }
    });
    TableColumn year = table.getColumnModel().getColumn(2);
    comboBox.addItem("A");
    comboBox.addItem("B");
    comboBox.addItem("C");
    comboBox.addItem("D");
    year.setCellEditor(new DefaultCellEditor(comboBox));
    add(new JScrollPane(table), BorderLayout.CENTER);
    add(button, BorderLayout.SOUTH);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(600, 500);
    setLocationRelativeTo(null);
    setVisible(true);
}
public static void main(String args[]) {
    new sinX();
}
}

共有1个答案

艾宁
2023-03-14

我面临的问题是JComboBox不工作。

year.setCellEditor(new DefaultCellEditor(comboBox));

上面的代码表示您正试图使用组合框作为给定列的编辑器。

public boolean isCellEditable(int row, int column)
{
    return false;
}

但是,您已经在模型中声明,所有列都不可编辑。

对于要编辑数据的任何列,您需要返回true。

JCheckBox也在工作

不是真的。是的,您会看到布尔值呈现为复选框。但是,您不能通过单击它来更改其值,当然,除非您也为该列返回true。

 类似资料:
  • 问题内容: 我将此组合框添加到面板中。如果直接在数据库中添加一些项目,则希望那些新添加的项目显示在组合框中。 我可以在调试时看到这些值,但是这些值不会出现在我的组合框中。 如何在不关闭面板的情况下将那些新添加的值放入组合框? 问题答案: 如何使用ComboBoxModel?像这样…

  • 我创建了一个表单,其中添加了一个,它有3列。第二列和第三列有编辑器。 我希望当我们选择第二列组合框的第一项时,第三列组合框的第一个组合框也应该被选择,反之亦然。 我该怎么做?

  • 问题内容: 我有一个 JComboBox ,想在元素列表中有一个分隔符。如何在Java中做到这一点? 一个方便使用的示例场景是制作用于字体族选择的组合框。与Word和Excel中的font-family-selection- control类似。在这种情况下,我想在顶部显示最常用的字体,然后显示一个分隔符,最后按字母顺序显示分隔符下方的所有字体系列。 谁能帮我解决这个问题,或者在Java中是不可能

  • 我有和我在上编写了以下代码,以从选定项中添加行。 如果用户键入了所需的名称并点击了enter,则必须将其添加到jtable,但它不会添加一行。 我认为事件是原因, 通常我们首先从jComboBox中选择项,然后对 事件(例如JButton)进行编码。 所以在这里,我希望jComboBox中考虑所选项事件被添加到JTable中。 那么对于哪一个事件我必须编写代码或另一种方法来处理呢?