我有一个 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 中选择对应的记录。例如,假设按下“Bronx”栏:
我的代码可以正常工作,直到通过单击标题字段(行政区、类型、出现次数)对 JTable 进行排序为止。
最佳答案
您必须将 View 行号转换为准确的行号。
您可以通过以下方式做到这一点:
int realRowNumber = table.convertRowIndexToModel(viewRowIndex);
关于java - 单击一个栏并选择相应的 JTabel 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530976/