2009-05-01 7 views
1

Ich möchte den JFrame-Speicherort (bounds, extendedState) speichern, wenn der Benutzer ihn schließt. Wenn der Benutzer den Rahmen auf den zweiten Bildschirm bewegt und ihn maximiert, wie kann ich diese Informationen speichern? Meine naive (und einzelne Anzeige) Implementierung ist wie folgt:JFrame-Speicherort in Multi-Display-Umgebung speichern


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

Wie kann ich feststellen, auf welchem ​​Bildschirm der Rahmen befindet? Wie kann ich einen Rahmen auf den zweiten Bildschirm verschieben und dort maximieren?

Antwort

3

Um die ID des verwendeten Grafikgerätes zu finden:

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

in die andere Richtung, können Sie die Grafik Geräte mit finden:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDevices() 

Anschließend können Sie eine Konfiguration aus dem Gerät verwenden im JFrame Konstruktor. Ich glaube nicht, dass du es nach dem Bau einstellen kannst.

Natürlich sollten Sie vorsichtig sein, sagen Sie nicht, öffnen Sie den Rahmen aus dem Bildschirm, weil die Auflösung geändert hat.

+0

Ich denke, die getIDString() ist nicht so allgemein. Es kann nicht denselben Wert auf verschiedenen Maschinen/Plattformen ausgeben. Vielleicht, sollte ich stattdessen den Index frame.getGraphicsConfiguration(). GetDevice() -Objekt im GraphicsEnvironment.getLocalGraphicsEnvironment(). GetDevices() -Array? Entspricht die Reihenfolge des Arrays dem logischen Index des Displays? – akarnokd

+0

und wie male ich es in einem solchen Gerät neu? – Oso