2009-05-01 19 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