JTable JComboBox错误的第一项名称 [英] JTable JComboBox wrong first item name

查看:67
本文介绍了JTable JComboBox错误的第一项名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在JTable上添加了Swing JComboBox,但是我的第一项标签始终是javax.swing.JComboBox(...

I added a Swing JComboBox to a JTable, but the label of my first item is always 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,如下所示.

Don't add components to the table model. Instead, let the renderer handle the job, using "a label that displays the object's string value." Your initial label, an empty String, is shown below.

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

此外:

  • 接口代码,例如List<String> labels = new ArrayList<>()

事件分派线程开始.

经过测试的代码

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

这篇关于JTable JComboBox错误的第一项名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆