Обнаружить изменение разрешения экрана, сделанное пользователем (Java Listener?) - PullRequest
9 голосов
/ 17 сентября 2011

У меня есть приложение Java, которое запускает, создает графический интерфейс и прекрасно работает.Если пользователь изменит разрешение экрана (переключается с 1440x900 на 1280x768), я бы хотел послушать это событие.

Есть идеи?

PS - я бы хотелДелайте это в режиме события / прослушивателя, а не в режиме опроса, чтобы не тратить лишние циклы ЦП на что-то вроде таймера, постоянно опрашивающего размер экрана каждые N секунд, чтобы определить, изменился ли он.

Ответы [ 5 ]

4 голосов
/ 04 декабря 2012

Это сообщение старое, но: - опрос размера экрана раз в секунду не влияет на производительность - при изменении размера экрана каждое окно должно получать вызов repaint () (необходимо проверить это для ОСвы нацелены)

2 голосов
/ 17 сентября 2011

Помимо предложения Hovercrafts, вы можете рассмотреть фоновый поток, который проверяет текущее разрешение экрана, используя Toolkit.getScreenSize().

Вам необходимо проверить это, чтобы выяснить, насколько сильно влияние этого потока на производительность системы. Частота проверки изменений зависит от ваших требований (насколько быстро ваше приложение должно реагировать на изменения)

2 голосов
/ 17 сентября 2011

Я не думаю, что Java может сделать это самостоятельно. Вы должны иметь «крючок» в операционной системе, которая обнаруживает это изменение, и вы можете рассмотреть возможность использования JNA , JNI или отдельной утилиты, такой как, возможно, Sigar, которая сообщает ваша программа на Java. Из любопытства, почему вы хотите это сделать? Это для игры, которую вы делаете, или вы можете изменить размер приложения с графическим интерфейсом?

1 голос
/ 21 июля 2014

Вы можете создать глобальный слушатель PAINT для определения изменения размера экрана.

// screen resize listener
    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {

        @Override
        public void eventDispatched(AWTEvent event) {
// take a look at http://stackoverflow.com/questions/10123735/get-effective-screen-size-from-java
            Rectangle newSize = getEffectiveScreenSize(); 
            if (newSize.width != windowSize.width || newSize.height != windowSize.height)
                resize();

        }
    }, AWTEvent.PAINT_EVENT_MASK);
0 голосов
/ 19 сентября 2011

Вот мое предложение по этой проблеме,

  1. Каждый объект свинга может реализовывать интерфейс с именем java.awt.event.ComponentListener.
  2. Один из его методов - componentResized(ComponentEvent e).
  3. Ваш основной фрейм приложения должен реализовывать этот интерфейс и переопределять метод события resize. Вот как вы прослушиваете событие изменения размера: Checkout по этой ссылке . Я надеюсь, что это поможет вам.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...