我有一个JScrollPane分为两个Jpanel
,如图所示:
右边有一个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;条:
我的代码正常工作,直到通过单击标题字段(行政区,类型,出现次数)来命令JTable。
答案 0 :(得分:3)
您必须将视图行号转换为确切的行号。
您可以通过以下方式执行此操作:
int realRowNumber = table.convertRowIndexToModel(viewRowIndex);