Предотвратить перекрашивание окна при сворачивании - PullRequest
0 голосов
/ 07 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Реальная проблема, я полагаю, заключается в приостановке анимационных циклов и тому подобном, когда они минимизированы.Если вы используете 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
            }
        }
    }
);
1 голос
/ 08 марта 2012

Пример использования 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();
     }
  });
}
...