繁体   English   中英

JTable JComboBox错误的第一个项目名称

[英]JTable JComboBox wrong first item name

我在一个JTable添加了一个Swing JComboBox ,但是我的第一个项目的标签总是javax.swing.JComboBox(...

在此输入图像描述

我究竟做错了什么?

更新:这是我的代码:

import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

public class TableSelection extends JPanel {

    private DefaultTableModel model = new DefaultTableModel();
    private JTable table = new JTable(model);

    public TableSelection() {
        model = (DefaultTableModel) table.getModel();
        ArrayList<String> labels = new ArrayList<String>();
        labels.add("");
        for (int i = 1; i < 10 + 1; i++) {
            labels.add("" + (i - 1));
        }

        model.addColumn("Column");
        model.addColumn("Column2");

        JComboBox<String> jcombo1 = new JComboBox<String>();
        jcombo1.setModel(new DefaultComboBoxModel(labels.toArray()));
        jcombo1.setBackground(Color.WHITE);
        jcombo1.setSelectedIndex(1);
        DefaultCellEditor editor = new DefaultCellEditor(jcombo1);

        table.getColumnModel().getColumn(0).setCellEditor(editor);

        model.addRow(new JComboBox[]{jcombo1});

        table.setPreferredScrollableViewportSize(new Dimension(560, 300));
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.add(new JScrollPane(table));
        table.setRowSelectionInterval(0, 0);

    }

    public static void main(String[] args) {
        JFrame f = new JFrame("TableSelection");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new TableSelection());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

关键问题在于:

model.addRow(new JComboBox[]{combo});

不要将组件添加到表模型中。 相反,让渲染器使用“显示对象字符串值的标签”来处理作业。 您的初始标签是一个空String ,如下所示。

model.addRow(new String[]{labels.get(0)});

图片

此外:

测试代码:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

public class TableSelection extends JPanel {

    private final DefaultTableModel model = new DefaultTableModel();
    private final JTable table = new JTable(model);

    public TableSelection() {
        List<String> labels = new ArrayList<>();
        labels.add("");
        for (int i = 1; i < 10 + 1; i++) {
            labels.add("" + (i - 1));
        }
        model.addColumn("Column 1");
        model.addColumn("Column 2");

        JComboBox<String> combo = new JComboBox<>();
        combo.setModel(new DefaultComboBoxModel(labels.toArray()));
        combo.setBackground(Color.WHITE);
        combo.setSelectedIndex(1);
        DefaultCellEditor editor = new DefaultCellEditor(combo);
        table.getColumnModel().getColumn(0).setCellEditor(editor);
        //model.addRow(new JComboBox[]{combo});
        model.addRow(new String[]{labels.get(0)});
        table.setPreferredScrollableViewportSize(new Dimension(320, 120));
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.add(new JScrollPane(table));
        table.setRowSelectionInterval(0, 0);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame f = new JFrame("TableSelection");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(new TableSelection());
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        });
    }
}

问题是您将JComboBox到表模型而不是实际数据。

而不是这个:

model.addRow(new JComboBox[]{jcombo1});

做这个:

model.addRow(new Object[]{labels});

有一个完整的例子在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM