Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Java > Swing, перерисовка компонента после перекрытия


Автор: foreach 29.06.16, 09:39
Здравствуйте.

Есть свой компонент Swing, наследник JComponent с переопределенным методом paint(). Компонент во всю форму JFrame.
Если ресайзить форму, а значит и компонент вместе с ней, то все нормально, он перерисовывается.
Если завести форму за край экрана и вытащить, то перерисовки не происходит (см вложение).
ОС Windows 7, тема оформления Aero Glass. С классической темой все нормально.

Что я не учел?

Компонент класса GameMap.

Код инициализации:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    import javax.swing.*;
    import java.awt.*;
     
    /**
     * Created by Alex on 29.06.2016.
     */
    public class Main implements Runnable {
        @Override
        public void run() {
            MainForm form = new MainForm();
            form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //form.setLayout(new BorderLayout());
            GameMap map = new GameMap();
            //map.setIgnoreRepaint(true);
            map.setDoubleBuffered(true);
            AbstractGameModel model = new StandartGameModel(10, 10);
            map.setModel(model);
            model.addObserver(map);
            map.addMouseListener(new MouseDriver());
            form.addKeyListener(new KeyDriver());
            /*JRootPane rootPane = form.getRootPane();
            rootPane.add(map);*/
            form.setLayout(new BorderLayout());
            form.add(map);
            form.pack();
            form.setBounds(0, 0, 500, 500);
            form.setLocationByPlatform(true);
            form.setVisible(true);
        }
     
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Main());
        }
    }


Спасибо.
____________________.png (, : 718)

Автор: wind 30.06.16, 18:17
paintComponent() переопределяют у JComponent, а не paint()
ну и где сопстна компонент непонятно

Автор: foreach 01.07.16, 04:01
Нашел ошибку, и переопределил уже paintComponent().
Такой эффект получается, если из объекта Graphics g пытаться получить длину и ширину компонента.

g.getClipBounds().getHeight() и g.getClipBounds().getWidth() возвращают длину и ширину перерисовываемой области, а не самого компонента, и получается что изображение всего компонента ужимается в узкую полоску, на которой ничего не видно.

Спасибо.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)