在多显示环境中保存JFrame位置

时间:2009-05-01 07:41:51

标签: java swing jframe

我想在用户关闭它时存储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 个答案:

答案 0 :(得分:3)

要查找所用图形设备的ID:

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

走另一条路,你可以找到图形设备:

 GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices()

然后,您可以使用JFrame构造函数中设备的配置。我不相信你可以在施工后设置它。

当然,您应该注意不要在屏幕外打开框架,因为分辨率已经发生变化。