【发布时间】:2018-09-21 17:31:12
【问题描述】:
我正在尝试在一些服务器主机之间映射数据流。这个想法是数据在网络中的多播会话之间流动,我有一张数据来自和去往的表格。我想生成图表,显示使用箭头的去向。
我使用图形库绘制了一些形状(用于主机的矩形和用于多播会话的椭圆)并将形状的位置/比例数据存储在对象中,以便我可以计算箭头应锁定的位置。 我也在他们之间做了箭头。使用带有 paintComponenet 方法的自定义函数添加箭头,有点像 addArrow(startShape, endShape),它将找到形状的两个最近的锚点并在它们之间绘制箭头。
My work so far, randomly using the addArrow function
然而,这本身就很没有生气。我还想为箭头添加悬停效果,以便在鼠标指针触摸它时变粗并显示一些自定义文本。使用paintComponent 函数这似乎不可行,因为我无法向它绘制的形状添加事件。
我认为可以绘制箭头,然后将它们放入 JLabel 组件中并在其上定义鼠标事件。我也许还可以创建一个新的“箭头摆动组件”,但我认为这超出了我的水平。
你们有什么建议吗?
【问题讨论】:
-
我认为你需要监听画布上的鼠标事件,然后从事件的 xy 位置计算你自己是否落在你正在绘制的任何形状的范围内。跨度>
-
通常,当我完成此操作后,我会为每个要绘制的对象创建一个类。我给每个对象一个 draw() 方法和一个 containsPoint(x, y) 方法。然后,要绘制图像,您需要遍历对象集合,并在每个对象上调用 draw() 方法。您的对象必须知道它们的位置和状态,例如 isSelected 等...
-
你目前的工作是一个图表 - 祝你好运继续这个图表
-
@gpasch 是的,它是一个图表,由使用图形库的代码生成,这就是重点:P 我的问题是如何将事件添加到绘制的形状中。如果您真的需要,我可以添加代码,但我觉得这不会有太大帮助,因为我相信我已经清楚地解释了问题。
-
“使用paintComponent 函数这似乎不可行” - 可以,但您需要向模型提供信息,以便它知道该怎么做。这意味着您需要使用
MouseListener和可能的MouseMotionListener。您还应该调查JComponent的getTooltipText方法
标签: java swing user-interface shapes