2010-06-14 17 views

risposta

97

Creare un JFrame o JPanel con BorderLayout, assegnargli qualcosa come un BevelBorder o un bordo di linea in modo che sia separato dal resto del contenuto e quindi aggiungere il pannello di stato in BorderLayout.SOUTH.

JFrame frame = new JFrame(); 
frame.setLayout(new BorderLayout()); 
frame.setSize(200, 200); 

// create the status bar panel and shove it down the bottom of the frame 
JPanel statusPanel = new JPanel(); 
statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED)); 
frame.add(statusPanel, BorderLayout.SOUTH); 
statusPanel.setPreferredSize(new Dimension(frame.getWidth(), 16)); 
statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.X_AXIS)); 
JLabel statusLabel = new JLabel("status"); 
statusLabel.setHorizontalAlignment(SwingConstants.LEFT); 
statusPanel.add(statusLabel); 

frame.setVisible(true); 

Ecco il risultato del codice barra di stato sopra sulla mia macchina:

enter image description here

+16

grazie a dio, questo è l'unico codice a barre di stato java utile su tutti gli interni. –

+1

non ha funzionato per me, la barra di stato è finita nel mezzo del finestra –

+0

È necessario utilizzare un layout diverso all'interno di JPanel.Come nel frammento di codice sopra, BoxLayout produrrà il risultato come nell'immagine. –

6

Purtroppo swing non hai il supporto nativo per StatusBars. È possibile utilizzare un e un'etichetta BorderLayout o qualsiasi altra cosa è necessario visualizzare in fondo:

public class StatusBar extends JLabel { 

    /** Creates a new instance of StatusBar */ 
    public StatusBar() { 
     super(); 
     super.setPreferredSize(new Dimension(100, 16)); 
     setMessage("Ready"); 
    } 

    public void setMessage(String message) { 
     setText(" "+message);   
    }   
} 

Poi, nel tuo pannello principale:

statusBar = new StatusBar(); 
getContentPane().add(statusBar, java.awt.BorderLayout.SOUTH); 

Da: http://www.java-tips.org/java-se-tips/javax.swing/creating-a-status-bar.html

+0

L'utilizzo di JPanel, invece di JLabel per una barra di stato è un'idea molto migliore. –

+0

@Bozhidar Batsov: Sì, lo è. – Simon

2

consiglierei il componente barra di stato nel SwingX library - Ecco il doc dell'API per status bar is here

A good example of its use is here.

Buon divertimento.

+4

Tirare l'intero SwingX per un componente che è banale da implementare non mi sembra la migliore idea ... Se stai già utilizzando SwingX nell'app, va bene, ma per il resto è un completo overkill ... –

4

Ho usato libreria altalena dal L2FProd. La libreria della barra di stato che hanno fornito è molto buona.

Qui di seguito è come lo si dovrebbe utilizzare:

  1. Scaricare il JAR che stanno fornendo e metterlo nel classpath
  2. La barra di stato divide internamente l'area bar nella zona. Ogni zona può contenere un Componente (JLabel, JButton, ecc.). L'idea è di riempire la barra con le zone richieste e i componenti.

  3. un'istanza di barra di stato, come di seguito ....

    import java.awt.Component; 
    import javax.swing.BorderFactory; 
    import javax.swing.JLabel; 
    import com.l2fprod.common.swing.StatusBar; 
    
    StatusBar statusBar = new StatusBar(); 
    statusBar.setZoneBorder(BorderFactory.createLineBorder(Color.GRAY)); 
    statusBar.setZones(
        new String[] { "first_zone", "second_zone", "remaining_zones" }, 
        new Component[] { 
         new JLabel("first"), 
         new JLabel("second"), 
         new JLabel("remaining") 
        }, 
        new String[] {"25%", "25%", "*"} 
    ); 
    
  4. Ora aggiungere il sopra statusBar al pannello principale si dispone (BorderLayout e impostarlo al lato sud).

vedere uno screenshot di esempio da una delle applicazioni sto lavorando here (ha 2 zone). Fatemi sapere se avete problemi ...

+2

Screenshot è un collegamento morto. – GKFX

Problemi correlati