2009-05-01 9 views
1

ユーザーが閉じると、JFrameの場所(bounds、extendedState)を保存します。ただし、ユーザーがフレームを2番目の画面に移動して最大化すると、その情報をどのように保存できますか?私の素朴な(そしてシングルディスプレイ)実装は次のようなものです:マルチディスプレイ環境での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); 
    } 
} 

フレームがどの画面にあるかをどのようにして発見できますか? フレームを2番目の画面に移動して最大化するにはどうすればよいですか?

答えて

3

使用のグラフィックスデバイスのID検索するには:

あなたは、デバイスからコンフィギュレーションを使用することができます
GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices() 

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

は他の道を行く、あなたがグラフィックスデバイスを見つけることができますJFrameコンストラクタで私はあなたが建設の後にそれを設定することができるとは思わない。

もちろん、解像度が変更されているため、画面をオフにしないように注意してください。

+0

getIDString()は一般的ではないと思います。異なるマシン/プラットフォームで同じ値を返さないことがあります。 GraphicsEnvironment.getLocalGraphicsEnvironment()。getDevices()配列のframe.getGraphicsConfiguration()。getDevice()オブジェクトのインデックスを取得する必要がありますか?アレイの順序はディスプレイの論理インデックスに似ていますか? – akarnokd

+0

とそのようなデバイスで再ペイントする方法はありますか? – Oso

関連する問題