我使用JFreeChart
API创建了直方图。这是StackedBar直方图:
我的直方图表示右侧JTable
中的数据。例如,字段thea=11
作为Int32存在两次,而作为Int64存在两次。
我在我的图表上实现了一个鼠标事件:当一个人按下一个条形时,就会选择相应的Jtable记录。
例如,如果在JTable中按11.0
栏,我得到:
这是我的倾听者:
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)) {
int realRowNumber = table.convertRowIndexToView(i);
table.changeSelection(realRowNumber, 0, false, false);
break;
}
}
}
catch (Exception e) {
System.out.println("No bar selected");
}
}
});
侦听器使用单个条形图,但当条形图分为两个或多个部分时,它无法正常工作。
例如,如果我按下11
栏的蓝色部分,则右侧JTable
中的所选行是第一个11
为thea
的行,所以在我的情况下所选行为[11,Int32,2]
而不是[11,Int64,2]
,这是要选择的右行。