java - 选择行时 JTable 的奇怪行为

标签 java swing jtable tablemodel selectionmodel

我在 JScrollPane 中使用 JTable 和自定义 TableModel,禁用单元格/列选择,仅启用行选择(单选)。如果我不时选择一行,我执行单击的单元格中的值也会出现在相邻列中(并覆盖其中的值)。 有人可以给我一个提示,我做错了什么或者其他人遇到过这个问题吗?

提前感谢您的帮助!

编辑:我添加了 SSCCE。经过几次选择后,应该会出现该问题。您可以通过在将鼠标悬停在行上时按住鼠标来加速其发生。如果发生一次,则每次选择时都会发生。

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class TableIssueSSCCE {

    public TableIssueSSCCE() {
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JTable table = new JTable(new DefaultTableModel());
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.addColumn("Test1");
        model.addColumn("Test2");
        model.addColumn("Test3");
        model.addColumn("Test4");
        for (int i = 0; i < 1000; i++) {
            model.addRow(new String[]{
                "Column1" + i, "Column2" + i, "Column3" + i, "Column4" + i});
        }

        table.setFillsViewportHeight(true);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setCellSelectionEnabled(false);
        table.setColumnSelectionAllowed(false);
        table.setRowSelectionAllowed(true);
        table.setAutoCreateRowSorter(true);
        JScrollPane tableContainer = new JScrollPane(table);
        tableContainer.setVerticalScrollBar(new JScrollBar(JScrollBar.VERTICAL));
        tableContainer.setHorizontalScrollBar(new JScrollBar(JScrollBar.HORIZONTAL));
        frame.add(tableContainer, BorderLayout.CENTER);

        frame.setVisible(true);
    }

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

最佳答案

我通过更改为 Oracle 的 JRE 避免了该问题。所以这个问题似乎与OpenJDK有关。

关于java - 选择行时 JTable 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429731/

相关文章:

java - 多经纪人集群

java - HttpsURLConnection默认请求方式

java - JFrame repaint() 和 revalidate() 仅在 Mac 操作系统上调整窗口大小时更新

java - 使用方法 drawString(..) 使用 Arial 字体绘制日文字符 (Graphics2D)

java - 带有 JScrollPane 的自定义 CellEditor - 开始编辑问题

java - 为具有 2 列(字符串、整数)和 n 行的 JTable 实现自定义 CellEditor

java - 合并排序 - 使用 Int 数组对字符串数组进行排序

java - JBoss AS 7 远程独立客户端身份验证

java - 如何以及在何处使用 javax.swing 计时器

java - 每次通过循环向 jTable 添加一行?