如何在 Jlist 中添加两列?

2023-12-13

我找到了双JList示例代码,但我需要在一个Jlist。 如何在一个表格中添加两列Jlist?

我尝试使用ListCellRenderer,但我未能向模型添加元素。

Here's代码显示在带有图像的网页中。


你的意思是这样的吗?

Dual Wielding Tables

我首先要通读一下如何使用表格

主框架...

public class DualTableFrame extends JFrame {

    private JTable leftTable;
    private JTable rightTable;
    private JButton addButton;
    private JButton removeButton;

    public DualTableFrame() {

        setTitle("Dual wielding tables");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new GridBagLayout());

        leftTable = new JTable(new SimpleColorTableModel());
        rightTable = new JTable(new SimpleColorTableModel());

        setupTable(leftTable);
        setupTable(rightTable);

        populate((SimpleColorTableModel) leftTable.getModel());

        addButton = new JButton("Add >>");
        removeButton = new JButton("<< Remove");

        JPanel pnlActions = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        pnlActions.add(addButton, gbc);

        gbc.gridy++;
        pnlActions.add(removeButton, gbc);

        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.33;
        gbc.fill = GridBagConstraints.HORIZONTAL;

        add(new JLabel("Available Choices"), gbc);
        gbc.gridx++;
        add(new JPanel(), gbc);
        gbc.gridx++;
        add(new JLabel("Your Choices"), gbc);

        gbc.gridy++;
        gbc.gridx = 0;
        gbc.weighty++;
        gbc.fill = GridBagConstraints.BOTH;

        add(new JScrollPane(leftTable), gbc);
        gbc.gridx++;
        add(pnlActions, gbc);
        gbc.gridx++;
        add(new JScrollPane(rightTable), gbc);

        setSize(400, 600);

        addButton.setEnabled(false);
        removeButton.setEnabled(false);

        leftTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {

                int count = leftTable.getSelectedRowCount();
                addButton.setEnabled(count > 0);

            }
        });
        rightTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {

                int count = rightTable.getSelectedRowCount();
                removeButton.setEnabled(count > 0);

            }
        });

        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                moveSelectedRow(leftTable, rightTable);

            }
        });

        removeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                moveSelectedRow(rightTable, leftTable);

            }
        });

    }

    protected void moveSelectedRow(JTable from, JTable to) {

        SimpleColorTableModel fromModel = (SimpleColorTableModel) from.getModel();
        SimpleColorTableModel toModel = (SimpleColorTableModel) to.getModel();

        for (int index : from.getSelectedRows()) {

            Vector rowValue = (Vector) fromModel.getDataVector().get(index);

            toModel.addRow(rowValue);

        }

        int selectedRow = -1;
        while ((selectedRow = from.getSelectedRow()) != -1) {

            fromModel.removeRow(selectedRow);

        }

        from.clearSelection();

    }

    protected void populate(SimpleColorTableModel model) {

        model.addRow(new Object[]{"Black", Color.BLACK});
        model.addRow(new Object[]{"Blue", Color.BLUE});
        model.addRow(new Object[]{"Cyan", Color.CYAN});
        model.addRow(new Object[]{"Dark Gray", Color.DARK_GRAY});
        model.addRow(new Object[]{"Gray", Color.GRAY});
        model.addRow(new Object[]{"Green", Color.GREEN});
        model.addRow(new Object[]{"Light Gary", Color.LIGHT_GRAY});
        model.addRow(new Object[]{"Mangenta", Color.MAGENTA});
        model.addRow(new Object[]{"Orange", Color.ORANGE});
        model.addRow(new Object[]{"Pink", Color.PINK});
        model.addRow(new Object[]{"Red", Color.RED});
        model.addRow(new Object[]{"White", Color.WHITE});
        model.addRow(new Object[]{"Yellow", Color.YELLOW});

    }

    protected void setupTable(JTable table) {

        table.setFillsViewportHeight(true);

        table.setDefaultRenderer(Color.class, new ColorTableCellRenderer());

    }
}

表格单元格渲染器

public class ColorTableCellRenderer extends DefaultTableCellRenderer {

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

        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        setText(null);
        if (value instanceof Color) {

            setOpaque(true);
            setBackground((Color)value);

        }

        return this;

    }

}

桌子型号

public class SimpleColorTableModel extends DefaultTableModel {

    public SimpleColorTableModel() {

        addColumn("Name");
        addColumn("Color");

    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {

        Class clazz = String.class;

        switch (columnIndex) {

            case 1:
                clazz = Color.class;
                break;

        }

        return clazz;

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jlist 中添加两列? 的相关文章

随机推荐

  • 解析带有大数字的 JSON javascript

    我得到了一个JSON对象包括一个long输入 API 响应中的值 由于javascript无法处理64位数字 因此执行时JSON parse在响应中 它将数字四舍五入到 JavaScript 可以处理的最大值 API响应 subject s
  • 从 x,y 坐标检测左转或右转的算法

    我有一个 x y 坐标数据集 从原点开始 每秒记录一次 我可以检测距离 速度 加速度 位移模量 有什么算法可以检测左转还是右转吗 我目前正在每 10 秒计算一次距离和位移模数 如果位移大约等于距离 则车辆处于直线路径上 但值发生变化则涉及转
  • 如何从 PATH 环境变量中提取完整路径?

    我想从中提取完整路径PATH本地cmd工具的环境变量 考虑以下PATH内容 C Program Files Windows Resource Kits Tools C Perl site bin C Perl bin C WI NDOWS
  • Graph API 响应中的相关 ID 在哪里?

    我正在尝试提供correlation id为了这issue但我不知道如何获得它 我认为它应该是回应 对吗 可能是 client request id 吗 HTTP响应 HTTP 1 1 403 Forbidden Cache Control
  • 从对象列表中删除重复项

    我有 MyObject 字段 id a b c e f 我有包含 500 000 个项目的列表 现在如何删除参数 a c f 具有相同值的所有重复项目 我只寻找最快 最有效的方法 UPDATE我实现了比较器 我的班级中的字段有不同的类型 所
  • requests-html 和无限滚动

    我正在检查一个 python 库 requests html 看起来很有趣 简单明了的抓取 但是 我不确定如何呈现无限滚动的页面 从他们的文档中我了解到我应该渲染一个具有特殊属性 向下滚动 的页面 我正在尝试 但我不知道具体如何 我知道如何
  • C# Datagridview:获取组合框列中的选定项目

    我正在开发一个允许用户操作 xml 文件的 GUI 我在 datagridview 中显示 xml 文件 通过 xml 元素按列整齐地组织 我允许用户添加列作为我的项目的扩展 该列被添加到数据集表中 然后更新到我用来显示 xml 文件的 d
  • 如何循环遍历数据表中特定列的值?

    我想循环访问数据表中特定列的值 谁能给出 C 编码吗 DataTable tbl new DataTable foreach DataRow row in tbl Rows object cellData row colName
  • 在 PHP 中使用 exec 命令时可能出现权限问题

    我们有一个小型办公室内联网 用 PHP 构建 在 apache 服务器上 即 WAMP 它允许我们在文件服务器上创建项目文件夹 这是通过使用 shell exec xcopy 命令和以下开关将一组模板文件夹复制到新位置来实现的 e k i
  • 通过 yum 安装 Fiware-Cygnus 时出错

    我正在尝试通过 yum 安装 Fireware Cygnus yum install cygnus ngsi 但中间我遇到了一些错误 Transaction Check Error file usr cygnus init d cygnus
  • 管理 Google Cloud Datastore 中实体内实体的嵌套列表

    我是数据存储新手 我正在尝试创建一个简单的应用程序来跟踪图书借阅 我希望数据库架构如下 books book id name borrowing timestamp user id firstname email users name bo
  • 网格数据绑定问题

    我们的应用程序会生成特定结构的大量结果列表 问题是 如果我想在 DataGrid 中显示它 我必须创建一个 DataTable 并将其设置为将使用内存的网格的数据源 所以我创建了一个绑定列表我创建的一个类 称为myRow 并且在 myRow
  • Java Swing - 如何在 Mac 上双击项目文件以打开我的应用程序并加载文件?

    我创建了一个 Mac Java Swing 应用程序 并在 Info plist 文件中为其设置了文件扩展名 pkkt 因此当双击该文件时 它会打开我的应用程序 当我这样做时 程序运行良好 现在我需要在程序中加载 pkkt 项目 但文件路径
  • CSS 规范中的哪里规定了如何处理具有相同名称的多个属性?

    调试中另一个问题 我想确认我已经正确理解浏览器应该如何处理像这样的声明 background image url image0 jpg background image image set url image1 jpg 1x url ima
  • 使用 ggplot2 将注释放置在绘图中心

    我想在几个 ggplot 对象的中心放置一个注释 我研究并发现了一些类似的问题 例如这里 ggplot2中geom text的相对定位 到目前为止 我找到的唯一答案是操纵绝对范围 例如 y ymax 2 我想在打印到 pdf 之前在循环中添
  • Log4j,将 Web 应用程序配置为使用相对路径

    我有一个 java web 应用程序 必须部署在 Win 或 Linux 计算机上 我现在想添加 log4j 进行日志记录 并且想使用日志文件的相对路径 因为我不想在每次部署时更改文件路径 该容器很可能是 Tomcat 但也不一定 这样做的
  • 指针和字符串文字

    我多次看到以下言论 char ch Hello cout lt
  • 使用哪个 Android 控件?

    我正在迈出 Android 编程的第一步 我的应用程序是在数据库中创建条目 对于此任务 我创建了一个新的活动 一切都很好 但我不太喜欢它的样子 Currently the emulator shows this 我想要一些类似于 新联系人
  • 是扩展“语法”还是扩展“运算符”?

    我听说 两者都称为 传播 syntax 和 传播operator 后者更受欢迎 相关网址MDN 文档表明它最初被称为传播operator但后来改为扩展语法 并且MDN 的运营商列表没有提到它 谷歌似乎建议了这个词operator更受欢迎和接
  • 如何在 Jlist 中添加两列?

    我找到了双JList示例代码 但我需要在一个Jlist 如何在一个表格中添加两列Jlist 我尝试使用ListCellRenderer 但我未能向模型添加元素 Here s代码显示在带有图像的网页中 你的意思是这样的吗 我首先要通读一下如何