【问题标题】:Save JFrame location in multi-display environment在多显示环境中保存 JFrame 位置
【发布时间】:2009-05-01 07:41:51
【问题描述】:

我想在用户关闭 JFrame 时存储它的位置(边界、扩展状态)。但是,当用户将框架移动到第二个屏幕并最大化它时,我如何存储该信息?我的幼稚(和单显示)实现是这样的:


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

如何发现框架位于哪个屏幕上? 如何将框架移动到第二个屏幕并在那里最大化?

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

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

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

    反过来,你可以找到图形设备:

     GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices()
    

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

    当然,你应该注意不要因为分辨率发生了变化而将框架打开到屏幕外。

    【讨论】:

    • 我猜 getIDString() 不是那么通用。它可能不会在不同的机器/平台上返回相同的值。也许,我应该改为在 GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices() 数组中获取 frame.getGraphicsConfiguration().getDevice() 对象的索引吗?数组的顺序是否类似于显示的逻辑索引?
    • 我如何在这样的设备上重新绘制它?
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2013-03-15
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多