java - 如何在 Java 中处理自定义的、可选择的线路类

标签 java swing graphics awt paintcomponent

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

Arrow Between Two Chassis

我可以毫无问题地自行绘制线条,但目前只是在父 JPanel 中的重写 paintComponent() 调用中完成。我对如何处理这个问题有一个初步的想法:

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 之上显示这些链接对象;听起来像是 JLayeredPane 的候选者,但对该路径有任何确认吗?

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

谢谢

-丰富

最佳答案

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

关于java - 如何在 Java 中处理自定义的、可选择的线路类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743144/

相关文章:

windows - 显示模式更改期间会发生什么?

java - 元数据提取器 java 不提取 exif 或 iptc

java - 如何在 Java 中的 GridLayout 面板的特定单元格中添加标签?

java - 有没有类似于Processing的Java绘图API?

java - setUndecorated(true) 与 toFront() 混淆

Java ImageIO.write() 在保存期间更改质量

获取位图所有边界位置的android程序

带有泛型的 Java Copy 构造函数

java - 如何传递 String 参数使其成为类方法调用的一部分?

java - 为什么改造客户端在没有网络连接时会崩溃?