用Java在多个面板上画线

用Java在多个面板上画线,java,swing,graphics,jpanel,Java,Swing,Graphics,Jpanel,我试图在多个面板上画一条线(图中的红线),但我似乎无法让它工作。我怎样才能做到这一点?有什么建议吗 利用添加在任意组件之上的.jdk7。对于早期版本,有一个项目实际上是它的前身,具有非常相似的api 下面是一个基本示例,使用自定义LayerUI从容器中的一个组件到另一个容器中的另一个组件绘制一条直线。两个容器的公共父容器使用该ui用JLayer装饰: JComponent comp = Box.createVerticalBox(); final JComponent upper

我试图在多个面板上画一条线(图中的红线),但我似乎无法让它工作。我怎样才能做到这一点?有什么建议吗

利用添加在任意组件之上的.jdk7。对于早期版本,有一个项目实际上是它的前身,具有非常相似的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);
JComponent comp=Box.createVerticalBox();
最终JComponent upper=新JPanel();
最终的JButton upperChild=新的JButton(“快乐在上”);
upper.add(upperChild);
最终JComponent lower=新JPanel();
最终JButton lowerChild=新JButton(“下部不愉快”);
lower.add(lowerChild);
公司增加(上);
公司增加(较低);
LayerUI ui=新的LayerUI(){
@凌驾
公共空隙涂料(图形g、J组件c){
超级油漆(g,c);
矩形u=SwingUtilities.convertRectangle(upper,upperChild.getBounds(),c);
矩形l=SwingUtilities.convertRectangle(lower,lowerChild.getBounds(),c);
g、 setColor(Color.RED);
g、 抽绳(u.x,u.y+u.H,l.x,l.y);
}
};
JLayer层=新JLayer(comp,ui);

BTW-图像很好,但请以后将其裁剪得更小。我用一个裁剪过的版本(430×375px)替换了原来的版本。就我个人而言,我不太理解指向glassPane的裸指针:它是rootPane的一个(顺便说一句,很难处理)属性,它是顶级容器的直接子级。那么,你(以及最近的其他人,你是今天的不幸者:-)真正的建议是什么:在每帧的基础上管理玻璃状的覆盖层?在别处使用根窗格?是否将管理glassPane的rootPane代码部分复制到另一个容器?真奇怪……嗯。。(在这件事上)真是无能。记住在很多情况下都会提到这一点。我个人更喜欢你的建议+1@kleopatra因为你的问题是肯定的,有四种正确的方法(我真的不理解你的评论以及为什么没有任何额外的代码、描述或其他任何东西),
1)
Rob's,
2)
J(X)层,
3)
JViewport
4)
GlassPane,