2010-06-14 9 views

Répondre

97

Créez un JFrame ou JPanel avec un BorderLayout, donnez-lui quelque chose comme un BevelBorder ou une bordure de ligne afin qu'il soit séparé du reste du contenu, puis ajoutez le panneau d'état à 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); 

Voici le résultat du code barre d'état ci-dessus sur ma machine:

enter image description here

+16

dieu merci, c'est à peu près le seul code barre d'état java utile sur l'ensemble des internets –

+1

n'a pas fonctionné pour moi, la barre d'état a fini au milieu de la fenêtre –

+0

Vous devez utiliser une disposition différente à l'intérieur du JPanel.Comme dans l'extrait de code ci-dessus, BoxLayout donnera le résultat comme dans l'image. –

6

Malheureusement swing n'a pas de support natif pour les barres d'état. Vous pouvez utiliser un BorderLayout et une étiquette ou tout ce que vous devez afficher au fond:

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);   
    }   
} 

Ensuite, dans le panneau principal:

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

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

+0

En utilisant JPanel, au lieu de JLabel pour une barre d'état est une bien meilleure idée. –

+0

@Bozhidar Batsov: Oui, c'est. – Simon

2

Je recommanderais composant de barre d'état dans le SwingX library - Voici le document API pour le status bar is here

A good example of its use is here.

Amusez-vous.

+4

Tirer sur tout le SwingX pour un composant trivial à mettre en œuvre ne me semble pas être la meilleure idée ... Si vous utilisez déjà SwingX dans l'application, c'est bien, mais sinon c'est une overdose complète ... –

4

J'ai utilisé la bibliothèque swing de L2FProd. La bibliothèque de barre d'état qu'ils ont fournie est très bonne.

Voici comment vous l'utiliser:

  1. Téléchargez le JAR qu'ils fournissent et le mettre dans votre classpath
  2. La barre d'état se divise en interne la zone de barre dans la zone. Chaque zone peut contenir un composant (JLabel, JButton, etc.). L'idée est de remplir la barre avec les zones requises et les composants.

  3. Instantiate la barre d'état ci-dessous ....

    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. Maintenant, ajoutez le statusBar ci-dessus au panneau principal vous avez (BorderLayout et mis sur le côté sud).

Voir une capture d'écran exemple de l'une des applications que je travaille sur here (il dispose de 2 zones). Faites-moi savoir si vous rencontrez des problèmes ....

+2

Capture d'écran est un lien mort. – GKFX

Questions connexes