Нарисуйте линию на нескольких панелях в Java - PullRequest
10 голосов
/ 11 февраля 2012

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

Drawing of required functionality

Ответы [ 2 ]

10 голосов
/ 11 февраля 2012

Рисовать на стеклянную панель .

5 голосов
/ 11 февраля 2012

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

Вот простой пример использования пользовательского LayerUI, который рисует прямую линию из одного компонентав контейнере к другому компоненту в другом контейнере.Общий родительский элемент двух контейнеров украшен 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);
...