java - 单击一个栏并选择相应的 JTabel 记录

标签 java swing jtable jfreechart

我有一个 JScrollPane 分为两个 Jpanel,如图所示:

enter image description here

右边有一个包含三列的JTable。左侧是使用 JFreeChart API 创建的相应直方图。
我必须在直方图上实现一个监听器,以确保当按下一个条时,左边的 JTable 中的相应记录被选中。

为了达到我的目标,我实现了这个监听器:

    chartPanel.addChartMouseListener(new ChartMouseListener() {

        @Override
        public void chartMouseMoved(ChartMouseEvent arg0) {
        }

        @Override
        public void chartMouseClicked(ChartMouseEvent arg0) {

            try{
            TableModel model = table.getModel();    
            CategoryItemEntity entity = (CategoryItemEntity) arg0.getEntity();
            Comparable row = entity.getRowKey();
            Comparable col = entity.getColumnKey();
            System.out.println(String.valueOf(row));
            String field = String.valueOf(col);

                for(int i = 0; i<model.getRowCount(); i++) {
                    if(model.getValueAt(i, 0).equals(field)) {
                        table.changeSelection(i, 0, false, false);

                    }
                }
            }
            catch (Exception e) {
                System.out.println("No bars selected");
            }


        }
    });

此监听器正常工作,直到通过单击标题对 JTable 进行排序为止。例如,如果根据 Number of occurrences 对 JTable 进行排序,当按下直方图的一个条时,JTable 中的选定行与单击的条不对应.

---编辑

当按下一个栏时,我必须在 JTable 中选择对应的记录。例如,假设按下“Bronx”栏:

enter image description here

我的代码可以正常工作,直到通过单击标题字段(行政区、类型、出现次数)对 JTable 进行排序为止。

最佳答案

您必须将 View 行号转换为准确的行号。

您可以通过以下方式做到这一点:

int realRowNumber = table.convertRowIndexToModel(viewRowIndex);

关于java - 单击一个栏并选择相应的 JTabel 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530976/

相关文章:

java - 在for循环java中创建表

java - 从 csv 文件中提取数据并放入二维数组 - 重构

java - 在 Itext 表中设置标题行

java - 在没有 mousePressed 的情况下检测 mouseReleased

java - 在使用 Swing 的 Java 中,我如何知道使用 invokeLater 启动的所有线程何时完成?

java - 从文本文件中搜索字符串(不区分大小写)

java - 如何通过单击行的边框并向上/向下拖动来在JTable中启用设置行高?

java - 如何使用 JAX-RS 捕获 WebApplicationException

java - 将 Jackson ObjectMapper 与 Jersey 一起使用

java - Netbeans 中的 JTable