воскресенье, 13 мая 2012 г.

Как в java поместить фрейм (JFrame) в центре экрана

Основной сложностью при помещении фрейма в центр экрана является получение значения текущего разрешения экрана. Получить разрешение экрана в java можно используя класс java.awt.Toolkit вызвав метод java.awt.Toolkit.getDefaultToolkit().getScreenSize().
Он возвратит значение разрешения экрана в виде объекта класса Dimension.
Дальше необходимо просто вычислить координаты, куда следует поместить фрейм.
Пример:

    /**
    * Puts any Window or Frame to the centre of the screen.
    * 
    * @author Cloud
    */
    public static void centerFrame(Window frame) {
        Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        int x = (int) ((screenSize.getWidth() - frame.getWidth()) / 2);
        if (x < 0) {
            x = 0;
        }
        int y = (int) ((screenSize.getHeight() - frame.getHeight()) / 2);
        if (y < 0) {
            y = 0;
        }
        frame.setBounds(x, y, frame.getWidth(), frame.getHeight());
    }

UPD (из комментария Tom-Trix): Есть более простой способ помещения фрейма в центр экрана - использование метода frame.setLocationRelativeTo(null). Однако следует учитывать, что данный метод будет работать только при использовании java версии выше 1.4 (первый способ работает и на более ранних версиях java). Пример :
    /**
    * Puts any Window or Frame to the centre of the screen.
    * 
    */
    public static void centerFrame(Window frame) {
        frame.setLocationRelativeTo(null);
    }

Важно: вышеописанные методы следует вызывать после установки размера фрейма (вызова методов setSize(), setPrefferedSize() и т.д.), а также желательно после добавления всех необходимых компонентов на фрейм, иначе эти методы просто не сработают или сработают не так, как ожидалось. Также скорее всего они могут не совсем корректно работать для среды с несколькими мониторами (не проверял).

5 комментариев:

  1. Можно проще:
    frame.setLocationRelativeTo(null)

    ОтветитьУдалить
    Ответы
    1. Не работает ваш способ. Ява 1.7. Форма выводится в правом нижнем углу.

      Удалить
    2. UPD: Проблема в том, что таким способом не правильно вычисляется центр экрана если в системе два и более монитора!
      То есть какие то костыли нужны, возможно это баг явы.

      Удалить
  2. с несколькими мониторами работает нормально. но только фрейм выводится на первом мониторе.(на котором меню пуск)

    ОтветитьУдалить

Ярлыки

java (31) оптимизация (7) CPanel (5) svn (5) windows xp (5) ошибка (5) свой сервер (5) файлы и папки (5) gui (4) регулярные выражения (4) jacoco (3) redmine (3) windows (3) автоматизация (3) защита данных (3) резервное копирование (3) сервер (3) JavaScript (2) Oracle SQL (2) adsl модем (2) apache maven (2) apache tomcat (2) coverage (2) dropbox (2) excel (2) firewall (2) netbeans (2) office 2007 (2) samsung (2) system tray (системный трей) (2) xerox (2) вирусы (2) принтер (2) сериализация (2) удаленный рабочий стол (2) HTML (1) JFileChooser (1) MySQL (1) Nokia (1) Ovi (1) P660R-T1 (1) WakeOnLan (1) blogger.com (1) ctfmon.exe (1) email (1) flash память (1) ftp (1) integration testing (1) ip (1) jQuery (1) jvisualWm (1) log4j (1) look and feel (1) myBatis (1) php (1) serialVersionUID (1) skype (1) smtp (1) ssh (1) swing (1) torrents (1) unit-testing (1) unix (1) vpn (1) windows 7 (1) xStarter (1) zip (1) безопасность (1) вход в систему (1) дизайн (1) документация (1) заправка (1) интернет (1) логирование (1) мышь (1) патч (1) перенос (1) печать (1) плагины (1) почтовые сообщения (1) программирование (1) процессы (1) прошивка (1) сеть (1) сеть. ошибка (1) скрытые файлы (1) списки (1) фильтрация (1) фокус (1) часовые пояса (1) шифрование (1) экран (1)