Предотвратить перекрашивание окна при сворачивании

Можете ли вы остановить программу перекрашивания панели, когда программа свернута? * Используется качели

2 ответа

Решение

Пример использования WindowListener может быть таким же простым, как и небольшая модификация моего предыдущего примера, которую можно найти здесь:

private static void createAndShowGui() {
  ShowGraph showGraphPanel = new ShowGraph(MAX_POINTS);
  TimerListener timerListener = new TimerListener(MAX_POINTS, showGraphPanel);

  JFrame frame = new JFrame("TestShowGraph");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.getContentPane().add(showGraphPanel);
  frame.pack();
  frame.setLocationByPlatform(true);
  frame.setVisible(true);

  // Timer now made a final variable so it can be referred to
  final Timer timer = new Timer(TIMER_DELAY, timerListener);
  timer.start();

  frame.addWindowListener(new WindowAdapter() {

     @Override
     public void windowOpened(WindowEvent arg0) {
        timer.start();
     }

     @Override
     public void windowIconified(WindowEvent arg0) {
        timer.stop();
     }

     @Override
     public void windowDeiconified(WindowEvent arg0) {
        timer.start();
     }

     @Override
     public void windowActivated(WindowEvent arg0) {
        timer.start();
     }
  });
}

Я полагаю, что реальная проблема заключается в приостановке анимационных циклов и тому подобном, когда они минимизированы. Если вы используете JFrameВы можете обнаружить события минимизации окна с помощью:

myFrame.addWindowStateListener(
    new WindowStateListener() {
        @Override
        public void windowStateChanged(WindowEvent evt) {
            if (myFrame.getState() == Frame.ICONIFIED) {
                // suspend painting/animation loops
            } else {
                // resume or continue painting/animation loops
            }
        }
    }
);
Другие вопросы по тегам