Рисовать линию по нескольким панелям в Java

Я пытаюсь нарисовать линию (красная линия на изображении) на нескольких панелях, но я не могу заставить ее работать. Как я могу сделать это возможным? Какие-либо предложения?

Drawing of required functionality

Ответ 1

Нарисуйте на стеке .

Ответ 2

JDK 7 добавил JLayer для поддержки визуальных украшений поверх произвольных компонентов. Для более ранних версий существует проект JXLayer на java.net, который на самом деле является его предшественником с очень похожими api

Здесь приведен пример с использованием пользовательского LayerUI, который рисует прямую линию от одного компонента в контейнере к другому компоненту в другом контейнере. Обычный родитель двух контейнеров украшен JLayer, используя ui:

    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);