*Markus: "Unbequemlichkeit" bei voller Fenstergröße

Hallo,

ich würde ein Programm gerne im Vollbildmodus starten, was eigentlich kein Problem darstellt. Jetzt ist es aber so, dass die von Java ermittelte Bildschirmauflösung eine Spur zu groß, oder besser gesagt, zu lang ist, denn das Fenster erstreckt sich nach unten hin bis außerhalb des Bildschirms. Die Höhe ist ungefähr jene, die die Taskbar des Fenstermanagers Xfce einnimmt, und da ich die Taskleiste von Xfce am oberen Rand des Bildschirms habe, ragt auch das Java-Fenster nach unten hin hinaus, was mich fast zu der Annahme führt, dass es nicht unbedingt die Schuld von Java ist.
Übrigens ist es kein Problem, das Fenster mit der Maus zu maximieren, wie das bei anderen Programmen möglich ist, wodurch sich das Fenster in der richtigen Größe befindet und nichts mehr hinausragt, aber wie kann man dieses Verhalten standardmäßig setzen?
Das Fenster vergrößere ich im Java-Programm folgendermaßen:

  
setSize(Toolkit.getDefaultToolkit().getScreenSize());  

Ich kann auch keine passende Methode finden, wobei ich auch nicht genau weiß, wonach ich suchen soll, mit der ich den gewünswchten Effekt hervorrufen kann.

Markus

--
http://www.apostrophitis.at
六 7東曲 人港ラ
  1. Hallo *Markus,

    ich weiß es auch nicht aber auf die schnelle habe ich folgendes gefunden: .setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);

    Mit freundlichem Gruß
    Micha

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
  2. Hallo,

    ich würde ein Programm gerne im Vollbildmodus starten, was eigentlich kein Problem darstellt.

    Unter einem Programm im "Vollbildmodus" verstehe ich, daß nur noch dieses
    eine Programm sichtbar ist und sonst nichts mehr vom Betriebssystem
    oder einem anderen Programm zu sehen ist. Also so, wie dies bei Spielen
    oder bei Media-Playern, die im Vollbildmodus arbeiten, üblich ist.

    Aus dem Kontext schließe ich aber, daß du ein maximiertes Fenster meinst.
    Ist das korrekt? Was verwendest du? Frame? JFrame? Window? Welche
    Java-Version verwendest du?

    Das sind Informationen, die du das nächste mal bei deiner Frage mit
    angeben solltest.

    Das Fenster vergrößere ich im Java-Programm folgendermaßen:

    setSize(Toolkit.getDefaultToolkit().getScreenSize());

      
    Naja, damit setzt du das Fenster halt auf die volle Desktop-Größe, also  
    wirklich wie ein Vollbildprogramm. Maximierte Programme verwenden aber  
    nicht die volle Desktop-Größe. Vielmehr bleibt der Platz für Task- und  
    sonstige -Bars reserviert.  
      
    Hast du es mal mit folgendem Code probiert?  
      
    ~~~java
      
    myFrame.setExtendedState(myFrame.getExtendedState()|Frame.MAXIMIZED_BOTH);  
    
    

    Damit maximierst du das Fenster. Ich würde erwarten, daß hierfür ein
    Native-Call auf das zugrundeliegende Fenstersystem abgesetzt wird. Der
    Fenster-System sollte dann schon wissen, wie ein maximiertes Fenster
    auszusehen hat und wie groß es sein sollte.

    Der Code funktioniert aber erst ab Java 1.4 und nur mit den Klassen
    Frame und JFrame (also nicht Window). Daher auch die Fragen oben.

    Gruß
    Slyh

    1. Hallo,

      myFrame.setExtendedState(myFrame.getExtendedState()|Frame.MAXIMIZED_BOTH);

        
      Mmh, beim Drüberlesen frage ich mich, ob diese Oder-Verknüpfung mit dem  
      alten Zustand überhaupt Sinn macht. (Ich habe den Code auch nur über  
      Google ermittelt.) Die aktuell möglichen States sind ja NORMAL, ICONIFIED,  
      MAXIMIZED\_HORIZ oder MAXIMIZED\_VERT.  
        
      NORMAL widerspricht sich mit ICONIFIED und MAXIMIZED\_XXX, ICONIFIED widerspricht  
      sich mit NORMAL und MAXIMIZED\_XXX, und MAXIMIZED\_XXX widerspricht sich mit  
      NORMAL und ICONIFIED. Eine Oder-Verknüpfung mit dem jeweils alten Wert  
      macht also wirklich nicht so viel Sinn.  
        
      Lass den vorderen Teil der Oder-Verknüpfung besser mal weg. Also dann so:  
      ~~~java
        
      myFrame.setExtendedState(Frame.MAXIMIZED_BOTH);  
      
      

      Gruß
      Slyh

      1. Hallo,

        also "Frame" wird überhaupt nicht erkannt. Maximal würde JFrame funktionieren, aber da bekomme ich auch nur seltsame Programmverhalten, wie, dass man bspw. das Programm gar nicht sieht, obwohl in der Taskleiste vorhanden. Oder aber auch ein kurzes Aufflackern und wieder Schließen des Programms, als ich versuchte, irgendwelche ähnlichen Methoden dieser Art zu kombinieren. Dabei ging es auch soweit, dass sich das Programm komplett aufhing, die Prozessorlast auf 100% ging, und ich Java nur mehr abschießen konnte (wodurch Eclipse auch gleich mit flog).
        Ich benutze übrigens JFrame und javax.swing mit der Java-Version 1.5.
        Und es stimmt, ich meine eigentlich ein maximiertes Fenster.

        Markus

        --
        http://www.apostrophitis.at
        六 7東曲 人港ラ
        1. Hallo,

          also "Frame" wird überhaupt nicht erkannt.

          java.awt.Frame?! Also, wenn du die Code-Completion von Eclipse verwendest,
          wird die Klasse korrekt inkludiert. Die genannten Konstanten sind
          nunmal in der java.awt.Frame definiert, deshalb solltest du sie auch
          über java.awt.Frame ansprechen. (Auch wenn es über JFrame im Prinzip
          auch geht. Schön ist das aber nicht.)

          Maximal würde JFrame funktionieren, aber da bekomme ich auch nur seltsame Programmverhalten, wie, dass man bspw. das Programm gar nicht sieht, obwohl in der Taskleiste vorhanden. Oder aber auch ein kurzes Aufflackern und wieder Schließen des Programms, als ich versuchte, irgendwelche ähnlichen Methoden dieser Art zu kombinieren. Dabei ging es auch soweit, dass sich das Programm komplett aufhing, die Prozessorlast auf 100% ging, und ich Java nur mehr abschießen konnte (wodurch Eclipse auch gleich mit flog).

          Dazu kann ich nichts sagen. Vielleicht mag dein Linux oder dein Java
          irgend etwas nicht.

          Schau mal, was dir Toolkit.isFrameStateSupported(int) zurückliefert,
          so wie in der API-Doku beschreiben.

          Gruß
          Slyh

          1. Hallo,

            java.awt.Frame?! Also, wenn du die Code-Completion von Eclipse verwendest,
            wird die Klasse korrekt inkludiert.

            Offensichtlich nicht. Ich kann mir nicht erklären, warum. Sonst habe ich keine Probleme damit. Offensichtlich muss ich java.awt.Frame per Hand eintippen. Die COde-Completion erkennt es nicht.

            Schau mal, was dir Toolkit.isFrameStateSupported(int) zurückliefert,

            true.

            setExtendedState(java.awt.Frame.MAXIMIZED_BOTH); funktioniert jetzt zwar, aber der gewünschgte Effekt bleibt aus. Ich werde einfach morgen dran weiterbasteln. Danke einstweil.

            Markus

            --
            http://www.apostrophitis.at
            六 7東曲 人港ラ
            1. Ich probierte nun nochmals herum, angefangen von
              setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
              setExtendedState(MAXIMIZED_BOTH);

              bis hin zu
               setMaximizedBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds());

              ..aber keines dieser Konstrukte brachte nur irgend ein Ergebnis. Ich verstehe das nicht.

              Markus

              --
              http://www.apostrophitis.at
              六 7東曲 人港ラ
              1. Nachtrag:

                Letzendlich fand ich heraus, dass es wohl ein Linux-Xfce-Problem ist, da der Code, auf einem Windowsrechner getestet, problemlos funktioniert.

                Markus

                --
                http://www.apostrophitis.at
                六 7東曲 人港ラ
                1. Hallo,

                  Letzendlich fand ich heraus, dass es wohl ein Linux-Xfce-Problem ist, da der Code, auf einem Windowsrechner getestet, problemlos funktioniert.

                  Das nächste mal mach ich hier im Forum dann auch nochmal einen Refresh
                  auf das Posting, auf das ich antworte, wenn es schon länger als 10 Minuten
                  im Browser-Tab unbeantwortet dahinschlummert... :-)

                  Gruß
                  Slyh

              2. Hallo,

                Ich probierte nun nochmals herum, angefangen von
                setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
                setExtendedState(MAXIMIZED_BOTH);

                Aber nicht beides, oder? Nimm mal nur das untere und vergiss das mit
                dem "setSize()" für's erste.

                Hast du mal ein minimales Beispiel gebastelt, also nur ein Frame, für das
                nach dem Öffnen der extended state so gesetzt wird, wie du oben schreibst?
                (Müßte ja ein 10-Zeiler sein...)

                Wenn das nicht geht, dann probier den Minimal-Code mal auf einem anderen
                Betriebssystem aus. Wenn er da geht, wird's dann wohl an Linux bzw. dem
                Fenstermanager bzw. Java liegen...

                Gruß
                Slyh