2010-05-06 3 views
9

Je voudrais personnaliser ma barre de titre, réduire, agrandir et fermer le bouton. J'ai donc utilisé setUndecorated(true); sur mon JFrame, mais je veux quand même pouvoir redimensionner la fenêtre. Quelle est la meilleure façon de mettre en œuvre cela?Comment ajouter du support pour le redimensionnement lors de l'utilisation d'un JFrame non décoré?

J'ai une bordure sur le RootPane, et je pourrais utiliser MouseListeners sur la Bordure ou le RootPane. Des recommandations?

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

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

+0

** Voici également un [Exemple] (http://stackoverflow.com/a/24476755/2587435)** –

Répondre

6

Comme vous l'avez dit, vous avez une bordure dans le volet racine. Par conséquent, il existe au moins un emplacement (sous le palce où votre bordure est tracée) où votre volet racine est le composant le plus élevé. En conséquence, vous pouvez ajouter un écouteur souris et un écouteur de mouvement souris. Lorsque vous cliquez sur le volet racine (et que vous appuyez sur le bouton de la souris), les écouteurs de la souris et du mouvement vous informent de la position initiale et de la position réelle de la souris. Par conséquent, vous pouvez mettre à jour la taille de l'image du décalage entre les deux valeurs, ce qui rendra votre image redimensionnable.

+0

Ceci est une réponse très délicate. – smwikipedia

5

J'ai trouvé une bonne méthode dans RootPane qui m'a donné cette fonctionnalité, alors maintenant je dois seulement savoir comment personnaliser la barre de titre et les boutons dessus. J'ai ajouté this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); dans mon constructeur pour UndecoratedFrame.

Il y a un peu plus sur la lecture de cette Sexy Swing App – The Unified Toolbar et How to control window decorations

+0

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

Questions connexes