На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Swing, перерисовка компонента после перекрытия
    Здравствуйте.

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

    Что я не учел?

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

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

    ExpandedWrap disabled
      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());
          }
      }


    Спасибо.
    Прикреплённая картинка
    Прикреплённая картинка
    Сообщение отредактировано: foreach -
      paintComponent() переопределяют у JComponent, а не paint()
      ну и где сопстна компонент непонятно
        Нашел ошибку, и переопределил уже paintComponent().
        Такой эффект получается, если из объекта Graphics g пытаться получить длину и ширину компонента.

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

        Спасибо.
        Сообщение отредактировано: foreach -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0304 ]   [ 17 queries used ]   [ Generated: 19.04.24, 17:16 GMT ]