2010-05-06 10 views
9

Desidero personalizzare la barra del titolo, ridurre a icona, ingrandire e il pulsante di chiusura. Quindi ho usato setUndecorated(true); sulla mia JFrame, ma voglio comunque poter ridimensionare la finestra. Qual è il modo migliore per implementarlo?Come aggiungere supporto per il ridimensionamento quando si utilizza un JFrame non decorato?

Ho un bordo sul RootPane e potrei usare MouseListeners sul Border o sul RootPane. Qualche consiglio?

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

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

+0

** Ecco anche un [Esempio] (http://stackoverflow.com/a/24476755/2587435)** –

risposta

6

Come hai detto, hai un bordo sul pannello radice. Di conseguenza, esiste almeno una posizione (sotto il punto in cui viene disegnato il bordo) in cui il riquadro principale è il componente più in alto. Di conseguenza, puoi aggiungerlo al listener di un mouse e a un ascoltatore di movimento del mouse.

Quando si fa clic sul riquadro principale (e si preme il pulsante del mouse), gli ascoltatori del movimento e del mouse informano della posizione del mouse iniziale ed effettiva. Di conseguenza, è possibile aggiornare le dimensioni del fotogramma dell'offset tra entrambi i valori, rendendo il frame ridimensionabile.

+0

Questa è una risposta molto delicata. – smwikipedia

5

Ho trovato un buon metodo in RootPane che mi ha dato questa funzionalità, quindi ora devo solo scoprire come personalizzare la barra del titolo e i pulsanti su di esso.

Ho aggiunto this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); nel mio costruttore per UndecoratedFrame.

C'è un po 'di lettura su questo su Sexy Swing App – The Unified Toolbar e How to control window decorations

+0

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

Problemi correlati