2009-05-01 18 views
1

我想在用户关闭它时存储JFrame的位置(bounds,extendedState)。但是,当用户将框架移动到第二个屏幕并将其最大化时,如何存储该信息?我的天真(和单一显示)实现是这样的:在多显示器环境中保存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); 
    } 
} 

我怎么能发现帧在哪个屏幕上? 如何将框架移动到第二个屏幕并使其最大化?

回答

3

要找到使用的图形设备的ID:

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

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

GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices() 

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

当然,您应该小心,不要因为分辨率发生变化而将画面打开。

+0

我想getIDString()不是那么一般。它可能不会在不同的机器/平台上返回相同的值。也许,我应该在GraphicsEnvironment.getLocalGraphicsEnvironment()。getDevices()数组中获取frame.getGraphicsConfiguration()。getDevice()对象的索引吗?数组的顺序是否与显示的逻辑索引相似? – akarnokd 2009-05-01 08:58:37