2010-05-06 2 views
9

Ich möchte meine Titelleiste, Minimieren-, Maximieren- und die Schließen-Taste anpassen. Also habe ich setUndecorated(true); auf meinem JFrame verwendet, aber ich möchte immer noch die Größe des Fensters ändern können. Was ist der beste Weg, das zu implementieren?Wie fügt man Unterstützung für die Größenanpassung bei Verwendung eines undekorierten JFrame hinzu?

Ich habe einen Rand auf der RootPane, und ich könnte MouseListeners auf dem Border oder der RootPane verwenden. Irgendwelche Empfehlungen?

import java.awt.Color; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.border.LineBorder; 

public class UndecoratedFrame extends JFrame { 

    private LineBorder border = new LineBorder(Color.BLUE,2); 
    private JMenuBar menuBar = new JMenuBar(); 
    private JMenu menu = new JMenu("File"); 
    private JMenuItem item = new JMenuItem("Nothing"); 

    public UndecoratedFrame() { 
     menu.add(item); 
     menuBar.add(menu); 
     this.setJMenuBar(menuBar); 
     this.setUndecorated(true); 
     this.getRootPane().setBorder(border); 
     this.setSize(400,340); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new UndecoratedFrame(); 
    } 
} 
+0

** Verwandte Frage: ** http://stackoverflow.com/questions/2781987/how-can-i-customize-the-title-bar-on-jframe – Jonas

+0

** Hier ist auch ein [Beispiel] (http://stackoverflow.com/a/24476755/2587435)** –

Antwort

6

Wie Sie gesagt haben, haben Sie einen Rahmen an Ihrem Stammbereich. Als Konsequenz gibt es mindestens eine Position (unterhalb der Stelle, an der der Rahmen gezeichnet wird), bei der der Hauptbereich die oberste Komponente ist. Als Konsequenz können Sie einen Maus-Listener und einen Maus-Motion-Listener hinzufügen.

Wenn Sie auf Ihren Stammbereich klicken (und die Maustaste gedrückt wird), werden Ihre Maus- und Bewegungslistener Sie über die ursprüngliche und tatsächliche Mausposition informieren. Als Konsequenz können Sie die Framegröße des Versatzes zwischen beiden Werten aktualisieren, wodurch Ihr Frame in der Größe veränderbar wird.

+0

Dies ist eine sehr heikle Antwort. – smwikipedia

5

Ich fand eine nette Methode in RootPane, die mir diese Funktionalität gab, so dass ich jetzt nur herausfinden muss, wie man die Titelleiste und die Knöpfe darauf anpasst.

Ich habe this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); in meinem Konstruktor für UndecoratedFrame hinzugefügt.

Es gibt einige weitere Lesung dazu auf Sexy Swing App – The Unified Toolbar und How to control window decorations

+0

** Mehr lesen: ** http://javabyexample.wisdomplug.com/java-concepts/34-core-java/57-spice-up-your-swing-ui-with-substance.html – Jonas

Verwandte Themen