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

时间:2012-02-11 09:45:12

标签: java swing graphics jpanel

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

Drawing of required functionality

2 个答案:

答案 0 :(得分:10)

画上glass pane

答案 1 :(得分:5)

JDK 7在任意组件之上添加了JLayer to support visual decorations。对于早期版本,项目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);