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

时间:2016-04-10 14:25:58

标签: 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中的对应记录。例如,假设有人按下&#34;布朗克斯&#34;条:

enter image description here

我的代码正常工作,直到通过单击标题字段(行政区,类型,出现次数)来命令JTable。

1 个答案:

答案 0 :(得分:3)

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

您可以通过以下方式执行此操作:

int realRowNumber = table.convertRowIndexToModel(viewRowIndex);