Сохранить местоположение JFrame в среде с несколькими дисплеями - PullRequest
1 голос
/ 01 мая 2009

Я хочу сохранить местоположение JFrame (bounds, extendedState), когда пользователь его закрывает. Однако, когда пользователь перемещает фрейм на второй экран и максимизирует его, как я могу сохранить эту информацию? Моя наивная (и одноэкранная) реализация выглядит так:


void saveFrame(JFrame frame) throws IOException {
    Properties props = new Properties();
    props.setProperty("State", String.valueOf(frame.getExtendedState()));
    props.setProperty("X", String.valueOf(frame.getX()));
    props.setProperty("Y", String.valueOf(frame.getY()));
    props.setProperty("W", String.valueOf(frame.getWidth()));
    props.setProperty("H", String.valueOf(frame.getHeight()));
    props.storeToXML(new FileOutputStream("config.xml"), null);
}
void loadFrame(JFrame frame) throws IOException {
    Properties props = new Properties();
    props.loadFromXML(new FileInputStream("config.xml"));
    int extendedState = Integer.parseInt(props.getProperty("State", String.valueOf(frame.getExtendedState())));
    if (extendedState != JFrame.MAXIMIZED_BOTH) {
        frame.setBounds(
            Integer.parseInt(props.getProperty("X", String.valueOf(frame.getX()))),
            Integer.parseInt(props.getProperty("Y", String.valueOf(frame.getY()))),
            Integer.parseInt(props.getProperty("W", String.valueOf(frame.getWidth()))),
            Integer.parseInt(props.getProperty("H", String.valueOf(frame.getHeight())))
        );
    } else {
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    }
}

Как узнать, на каком экране находится рамка? Как я могу переместить кадр на второй экран и развернуть его там?

1 Ответ

3 голосов
/ 01 мая 2009

Чтобы найти идентификатор используемого графического устройства:

frame.getGraphicsConfiguration().getDevice().getIDString()

Идя другим путем, вы можете найти графические устройства с:

 GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices()

Затем можно использовать конфигурацию с устройства в конструкторе JFrame. Я не верю, что вы можете установить его после строительства.

Конечно, вы должны быть осторожны, чтобы, скажем, не открывать экран без рамки, поскольку разрешение изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...