单击一个栏和 select 相应的 JTabel 记录

Click a bar and select the corresponding JTabel record

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

右边有一个 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");
            }


        }
    });

在通过单击 header 来订购 JTable 之前,此侦听器可以正常工作。例如,如果根据 Number of occurrences 对 JTable 进行排序,当按下直方图的某一条时,JTable 中的选定行与单击的条不对应。

---编辑

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

我的代码可以正常工作,直到通过单击 header 字段(行政区、类型、出现次数)来订购 JTable。

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

您可以通过以下方式完成此操作:

int realRowNumber = table.convertRowIndexToModel(viewRowIndex);