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

对于JTable的一列,我如何在每一行中放置唯一的组合框编辑器?

韦熙云
2023-03-14

这里的想法是:假设我有一个扩展TableModel的类,它具有类似于List >Collection 字段的内容。在事件中,我想清除JTable并重新添加行,其中一个特定列是组合框;组合框n中的项是“我的列表”中Collection.Get(n)中的列表 中的项。因此,我迭代collection添加行,并迭代每个collection.get(n)添加组合框项。

没有事件侦听器。当单击一个单独的按钮时,只要我可以在每个组合框上GetSelectedIndex就可以确定需要发生什么。

我已经花了两个半小时把我的GUI变成了通心粉代码,在这里我几乎扩展了所有内容,并且几乎所有内容都有最大程度的耦合。我想我甚至可能有两个不相交的JComboBox实例集合。我这样说是为了强调,发布我目前拥有的任何代码对我来说绝对没有好处。

我读过关于JTable的oracle教程,奇怪的是,所有这些都没有我能理解的解释。

所以基本上我只需要一个关于我需要什么的想法,因为我找不到任何资源。

共有1个答案

洪飞驰
2023-03-14

因此,基本上,您需要一个TableCelleditor,它能够将可用列表中的行植入JComboBox,例如...

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
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.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TableCellEditor {

    public static void main(String[] args) {
        new TableCellEditor();
    }

    public TableCellEditor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                List<List<String>> values = new ArrayList<>(25);
                for (int row = 0; row < 10; row++) {

                    List<String> rowValues = new ArrayList<>(25);
                    for (int index = 0; index < 10; index++) {
                        rowValues.add("Value " + index + " for row " + row);
                    }
                    values.add(rowValues);

                }

                DefaultTableModel model = new DefaultTableModel(new Object[]{"Data"}, 10);
                JTable table = new JTable(model);
                table.setShowGrid(true);
                table.setGridColor(Color.GRAY);
                table.getColumnModel().getColumn(0).setCellEditor(new MyEditor(values));

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class MyEditor extends DefaultCellEditor {

        private List<List<String>> rowValues;

        public MyEditor(List<List<String>> rowValues) {
            super(new JComboBox());
            this.rowValues = rowValues;
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

            JComboBox cb = (JComboBox) getComponent();
            List<String> values = rowValues.get(row);
            DefaultComboBoxModel model = new DefaultComboBoxModel(values.toArray(new String[values.size()]));
            cb.setModel(model);

            return super.getTableCellEditorComponent(table, value, isSelected, row, column);

        }

    }

}
 类似资料:
  • 我有一个表,表中有一些列。两列有组合框,现在我想做的是,当用户从column1组合框中选择一些值时,根据用户选择的值,应该填充column2组合框。例如,如果用户从column1组合框中选择value1,则column2组合框将仅显示与value1对应的值。

  • 问题内容: 我有一个带有4列的表格 每列将是A,B,C,D 列A是主键。列B具有唯一的名称约束。 现在,我想删除列B的唯一约束,并通过组合列B,C和D给出唯一约束。因此,该表将只允许一行包含列B,C和D中的特定值。 如何给这种约束? 我尝试给复合唯一密钥,例如: 但这是在检查是否存在任何约束,而不是在检查唯一键约束的组合。 问题答案: 在这些列上创建唯一键 Oracle / PLSQL:唯一约束

  • 我想在我的应用程序中创建一个JTable。该表将包含两个库,第一个是软件模块的名称。第二列需要包含一个JComboBox,第一列中包含软件模块的修订号。 这甚至可能,或者我需要找到另一种方法来做到这一点?(例如:将按钮放在单元格中,然后从弹出窗口中选择修订版本) 提前谢谢你!

  • 问题内容: 我不确定这是否可行,但我想计算表中唯一值的数量。我知道要计算我执行的唯一FolderID的数量: 但是我想对文件夹表中的文件夹标识和用户标识的唯一组合数进行计数。有没有办法做到这一点? 问题答案:

  • 如何实现数据库中没有两个相同的记录,而这三列的值组合在一起是相同的?

  • 我在stackoverflow上看到过类似的问题,但无论如何,我无法用这些答案解决我的问题。 我想做的是: 单击JTable中的double on单元格(由于IsCelledTable方法,该单元格可以编辑) 在自定义表中保存单元格的新值以打印此新值 更新我的数据库(SQlite)中的数据 这是我的自定义表模型 . 这是我打印JTable的JPanel: