在Java中跨多个面板绘制线条

11

我试图在多个面板上绘制一条线(图中的红线),但似乎无法实现。有什么建议吗?

所需功能的绘图


顺便说一句 - 图片很好,但请在以后将它们裁剪得更小。我用裁剪过的版本(430×375像素)替换了原始版本。 - Andrew Thompson
2个回答

10

就我个人而言,我并不太理解指向glassPane的裸指针:它是根容器的直接子级(顺便说一句,很难处理)属性。那么你(以及最近的其他人,今天你很不幸 :-))真正建议的是什么:基于每个帧管理玻璃覆盖?在其他地方使用rootPane?将管理glassPane的rootPane代码部分复制到另一个容器中?真的很好奇... - kleopatra
我真的很茫然(针对这个问题)。只记得在很多类似情况下都提到过它。个人而言,我更喜欢您的建议。+1 - Andrew Thompson
1
@kleopatra,对于你的问题,答案只有一个是肯定的,而且有四种正确的方法(我真的不明白你的评论为什么没有任何额外的代码、描述或其他东西),分别是:1) Rob's http://tips4java.wordpress.com/2009/07/26/overlap-layout/,`2)` J(X)Layer,3) JViewport,4) GlassPane。 - mKorbel

6
JDK 7在任意组件上面添加了JLayer以支持视觉装饰。对于早期版本,有一个项目JXLayer at java.net,它实际上是具有非常相似API的其前身。
下面是一个基本示例,使用自定义的LayerUI从一个容器中的一个组件绘制一条直线到另一个容器中的另一个组件。这两个容器的公共父级使用该ui装饰了一个JLayer:
    JComponent comp = Box.createVerticalBox();
    final JComponent upper = new JPanel();
    final JButton upperChild = new JButton("happy in upper");
    upper.add(upperChild);
    final JComponent lower = new JPanel();
    final JButton lowerChild = new JButton("unhappy in lower");
    lower.add(lowerChild);
    comp.add(upper);
    comp.add(lower);
    LayerUI<JComponent> ui = new LayerUI<JComponent>() {

        @Override
        public void paint(Graphics g, JComponent c) {
            super.paint(g, c);
            Rectangle u = SwingUtilities.convertRectangle(upper, upperChild.getBounds(), c);
            Rectangle l = SwingUtilities.convertRectangle(lower, lowerChild.getBounds(), c);

            g.setColor(Color.RED);
            g.drawLine(u.x, u.y + u.height, l.x, l.y);
        }

    };
    JLayer<JComponent> layer = new JLayer<JComponent>(comp, ui);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接