2

我有一个应用程序,我希望用户能够将鼠标悬停和/或右键单击在 JPanel 上绘制的线条。我完全希望我会将该行作为处理所有行为的对象的一部分来实现,但我有一个更基本的问题,即如何实现下图中显示的行。先上图:

两个机箱之间的箭头

我可以毫无问题地自己画线,但它目前只是paintComponent()在 parent 的覆盖调用中完成JPanel。我对如何处理这个问题有一个初步的想法:

public class ChassisLink extends JComponent implements MouseListener
{
  //Rectangle  to handle mouse-over and right-click for each segment?
    public ChassisLink()
{
    initializeLink();
}

private void initializeLink()
{
    //Init stuff
}

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
                //Paint the line(s)
}
        //MouseListener events...
//When mouse-over on the line, display a tooltip
//When right clicking, display a different dialog
}

我认为我无法理解的问题是如何进行鼠标悬停或单击点检查。我是否使用矩形并检查鼠标当前是否包含在该矩形中,而只是忽略箭头的三角形部分?我对此非常乐观。然后我的问题变成了如何在包含机箱对象的现有 JPanel 之上显示这些链接对象;听起来像是 a 的候选人JLayeredPane,但是在那条道路上有任何确认吗?

无论如何,我很感激人们能给我的任何意见。如果有些模糊,请随时要求进一步解释。

谢谢,

-富有的

4

1 回答 1

2

你在正确的轨道上。我建议使用 Area 而不是 Rectangle - 你也可以通过这种方式获得箭头,并且 Area 使用 AffineTransforms 非常容易操作。

于 2012-05-24T18:23:24.603 回答