Сохранение местоположения JFrame в среде с несколькими дисплеями

StackOverflow https://stackoverflow.com/questions/810539

  •  03-07-2019
  •  | 
  •  

Вопрос

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


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);
    }
}

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

Это было полезно?

Решение

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

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

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

 GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices()

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top