我有一个 jPanel,其中包含许多可以拖动的子面板。我想做的是画线将其中一些子面板连接在一起。
然而,虽然这看起来应该很简单,但事实证明它非常令人沮丧。我得到的最好的方法是覆盖原始 jPanel 中的 paintComponent 函数,如下所示:
panCharDisplay = new javax.swing.JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
paintLines(g);
}
};
然后像这样画线:
public void paintLines(Graphics g) {
g.setColor(Color.BLUE);
for (Character c : characters) {
if (c.female && c.spouse != null) {
g.drawLine(c.display.getX(), c.display.getY(), c.spouse.display.getX(), c.spouse.display.getY());
}
}
}
这在某种意义上是有效的,因为它在技术上确实在正确的位置、正确的颜色等处绘制了线条,但前提是我滚动远离线条应该在的位置,然后再滚动回来。每当我在它周围拖动一个组件时,它都会导致奇怪的图形错误,因为它只绘制线的一部分并且不会擦除之前的部分。这些线条也显示在子面板下方而不是在它们上方,使它们在很多时候都隐藏起来。
我认为这是因为我在错误的时间绘制线条,并且需要在绘制子面板后绘制它们,并且还要确保每次拖动面板时都重新绘制它们。
是否还有其他地方可以覆盖以使线条更一致地显示?我尝试的另一种方法是创建一个扩展 JPanel 的类,并尝试使用它来处理绘图,但我根本无法让它工作。