Метод рисования колебания JPanel отвечает, но ожидает ответа paintComponents при настройке фонового изображения - PullRequest
0 голосов
/ 22 февраля 2012

Я устанавливаю фоновое изображение в JPanel с помощью этого

JPanel panel = new JPanel(){
            @Override
            public void paint(Graphics g) {
                super.paint(g);
                g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, null);
            }

        };


        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setPreferredSize(new Dimension(height, width));
        panel.setOpaque(false);
        panel.add(new JLabel("SCIENCE FAIR"));
        panel.setBorder(new RoundedBorder(1,2,new Color(100, 200, 112)));

        return panel;

Я ожидал, что метод paintComponents ответит, но каким-то образом paintComponents не отвечает, но paint выполняет работу по рисованию фонового изображения в JPanel.Эта JPanel является дочерью другой JPanel.Родительский JPanel использует MigLayout, а внутри родительского JPanel я добавляю 4 разных JPanel с разным фоновым изображением.

Фоновое изображение готово, но поверх фонового изображения я не могу добавить JLabel, поэтомуЯ сомневаюсь, что метод краски - проблема

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Вы рисуете весь компонент после дети рисуются - другими словами, вы рисуете прямо над ними. Никогда переопределить paint() в компоненте Swing; Вместо этого переопределите paintComponent() и обязательно вызовите super.paintComponent() после рисования фонового изображения.

1 голос
/ 22 февраля 2012

Также измените это:

g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, null);

К этому:

g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, this);

A JPanel - это ImageObserver, так что вы можете также поставить его как .. ImageObserver.

...