Wie rufe ich setUndecorated() auf, nachdem ein Frame sichtbar gemacht wurde?

Lesezeit: 4 Minuten

Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Glücklich

In meiner Swing-Anwendung möchte ich die Möglichkeit haben, zwischen dekoriert und nicht dekoriert zu wechseln, ohne den gesamten Rahmen neu zu erstellen. Die API lässt mich jedoch nicht anrufen setUndecorated() nachdem der Rahmen sichtbar gemacht wurde.

Auch wenn ich anrufe setVisible(false), isDisplayable() gibt immer noch true zurück. Die API sagt, dass die einzige Möglichkeit, einen Frame nicht anzeigbar zu machen, darin besteht, ihn neu zu erstellen. Ich möchte den Rahmen jedoch nicht neu erstellen, nur um einige Titelleisten auszuschalten.

Ich mache eine Vollbild-Anwendung, die zwischen Vollbild- und Fenstermodus umgeschaltet werden kann; Es sollte schalten können, während der Zustand beibehalten wird usw.

Wie mache ich das, nachdem ein Frame sichtbar ist?.

1647152227 373 Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Yishai

Hast du versucht anzurufen Frame.dispose() und dann ändern? Ich habe es selbst noch nicht ausprobiert, aber es könnte funktionieren.

Wenn nicht, dann können Sie den Rahmen zu einem unbedeutenden Teil der Klasse machen, mit nur den minimalsten Haken an der oder den obersten Tafeln, und diese einfach in den neuen Rahmen verschieben. Alle Kinder werden folgen.

  • seine erstaunliche und einfache Lösung Vielen Dank, dass ich dies getan habe dispose(); ‘setUndecorated(true); SetExtendedState (JFrame.MAXIMIZED_BOTH); setVisible(true);’

    – maq

    8. Dezember 2014 um 20:02 Uhr


  • Dies sollte die akzeptierte Antwort sein, da nicht jedes Mal ein neuer JFrame erstellt wird.

    – PaulProgrammiererNoob

    13. März 2017 um 20:09 Uhr

1647152228 922 Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Steve McLeod

Du kannst nicht. Das war meine Erfahrung, als ich versuchte, dasselbe zu erreichen.

Wenn Sie jedoch Ihre gesamte Benutzeroberfläche in einem Bereich haben, der sich in Ihrem Rahmen befindet, können Sie einen neuen Rahmen erstellen und diesen Bereich zum Rahmen hinzufügen. Nicht so viel Arbeit.

Etwas wie das:

// to start with
JPanel myUI = createUIPanel();
JFrame frame = new JFrame();
frame.add(myUI);

// .. and later ...

JFrame newFrame = new JFrame();
newFrame.setUndecorated();
newFrame.add(myUI);

In Swing kann sich ein Panel (und tatsächlich jede Instanz einer Komponente) jeweils nur in einem Frame befinden. Wenn Sie es also einem neuen Frame hinzufügen, ist es sofort nicht mehr im alten Frame.

  • Berufung dispose() gibt die nativen Fensterressourcen frei. dann können Sie Eigenschaften wie undekoriert usw. bearbeiten. mit pack() Sie erstellen die Fensterressourcen neu. dann ruf einfach an setVisible(true) und alles funktioniert (die Position und alle Komponenten werden nicht verändert)

    – Thomas

    5. Dezember 2012 um 10:48 Uhr


  • Wie Thomas beschrieben hat, ist dies möglich, siehe auch stackoverflow.com/questions/27715638/…

    – Christian Hüjer

    31. Dezember 2014 um 7:10 Uhr

Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Thomas

Berufung dispose() gibt die nativen Fensterressourcen frei. dann können Sie Eigenschaften wie undekoriert usw. bearbeiten. dann ruf einfach an setVisible(true) um die Fensterressourcen neu zu erstellen und alles funktioniert gut (die Position und alle Komponenten werden nicht geändert)

dispose();
setUndecorated(true/false);
setVisible(true);

Schau mal rein https://tvbrowser.svn.sourceforge.net/svnroot/tvbrowser/trunk/tvbrowser/src/tvbrowser/ui/mainframe/MainFrame.java

In Methode switchFullscreenMode():

dispose();
...
setFullScreenWindow(...);
setUndecorated(true/false);
setBounds(mXPos, mYPos, mWidth, mHeight);
...
setVisible(true);

Tatsächlich gibt es noch viel mehr Dinge, um verschiedene Seitenleisten zu verbergen, die wieder erscheinen, wenn die Maus die Seiten berührt.

Beachten Sie auch, dass Sie die Grenzen explizit festlegen müssen. Window.setExtendedState(MAXIMIZED_BOTH) stört in der zeitlichen Nähe von dispose() stark, da beide auf mehrere native Events des Betriebssystems angewiesen sind, die verloren gehen, sollte das Fenster in diesem Sekundenbruchteil nicht darstellbar sein.

Ich empfehle nicht, den Standardbildschirm direkt zu nehmen:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

und verwenden Sie stattdessen den Bildschirm, auf dem Ihr JFrame gerade läuft:

setBounds(getGraphicsConfiguration().getBounds());
getGraphicsConfiguration().getDevice().setFullScreenWindow(this);

Obwohl es derzeit dasselbe ist, kann es sich in Zukunft ändern.

Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Deepak Karamchandani

Versuchen:

dispose();
setUndecorated(true);
setVisible(true);

Hör zu. Hoffe es hilft!!

1647152230 66 Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Tom Hawtin – Tackline

Nun, Sie werden eine andere Frame-Instanz benötigen. Möglicherweise können Sie den Inhalt Ihres Rahmens verschieben, ohne ihn neu zu erstellen. Der Schlüssel hier ist, dass Ihr Code nicht von einem bestimmten Frame abhängig ist. Dies ist in jedem Fall eine grundlegende gute Praxis.

1647152230 211 Wie rufe ich setUndecorated auf nachdem ein Frame sichtbar gemacht
Ferrmolina

Hier ist ein Code, wie man es macht ALT + Eingeben wechselt in den Vollbildmodus ohne den Balkenmodus und Minimieren mit Anzeigen der Titelleiste und der Startleiste:

public class myTest extends JFrame{
 //Your codes...
     //if "ALT" key on hold and "Enter" key pressed with it
     if (evt.isAltDown() && evt.getKeyCode() == evt.VK_ENTER) {    
         //if the JFrame has Title bar
         if (isUndecorated()) {
             //this will dispose your JFrame
             dispose();
             //here to set it with no Title bar
             setUndecorated(false);
             pack();
             setLocationRelativeTo(null);
             //as you dispose your JFrame, you have to remake it Visible..
             setVisible(true);
          } else {
             dispose();
             setUndecorated(true);
             setExtendedState(MAXIMIZED_BOTH);
             setVisible(true);
        }
    }
//your codes
}

996210cookie-checkWie rufe ich setUndecorated() auf, nachdem ein Frame sichtbar gemacht wurde?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy