Java JFreechart右键单击XYItemEntity
我意识到chartMouseClicked方法只有在用户左键单击图表时才会被调用。MousePressed()和MouseRelease()方法是在用户右键单击图表时被调用的。但我需要更多的东西。我需要它们在一起。我需要找到用户是否右键单击XYItemEntity。然后我将显示新的弹出菜单项。如果用户选择菜单项,我将从XYITEM传递信息。如果它不是XYItemEntity,我将不会更新图表的弹出菜单。这就是如何检查chartMouseClicked上的XYITEM实体Java JFreechart右键单击XYItemEntity,java,jfreechart,Java,Jfreechart,我意识到chartMouseClicked方法只有在用户左键单击图表时才会被调用。MousePressed()和MouseRelease()方法是在用户右键单击图表时被调用的。但我需要更多的东西。我需要它们在一起。我需要找到用户是否右键单击XYItemEntity。然后我将显示新的弹出菜单项。如果用户选择菜单项,我将从XYITEM传递信息。如果它不是XYItemEntity,我将不会更新图表的弹出菜单。这就是如何检查chartMouseClicked上的XYITEM实体 panel.addCha
panel.addChartMouseListener(new ChartMouseListener() {
public void chartMouseClicked(final ChartMouseEvent event) {
/** If Time Instance point is clicked */
if (event.getEntity() instanceof XYItemEntity) {
}}
我已经设法找到了一个结合chartMouseMoved和MouseRelease方法的解决方案
public void chartMouseMoved(final ChartMouseEvent event) {
if (event.getEntity() instanceof XYItemEntity) {
panel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
clickedSimulationItem = (XYItemEntity) event.getEntity();
} else if (event.getEntity() instanceof PlotEntity) {
handleMouseMoveOnPlot(event);
} else {
panel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
clickedSimulationItem = null;
}
}
private void addMouseListener() {
panel.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
if (clickedSimulationItem != null) {
panel.getPopupMenu().add(new JMenuItem("denem"));
/** update pop up */
}
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
ChartMouseEvent::getTrigger
“返回触发此事件的鼠标事件。”当我右键单击图表时,不会触发ChartMouseListener方法,会调用MouseListener方法。所以我不能调用ChartMouseeEvent::getTrigger。你认为呢?Mac和Windows上的弹出触发器是不同的。你可能需要一个定制的图表面板isPopupTrigger()
应同时在mousePressed
和mouseereleased
中进行检查,以确保跨平台功能正常。