web-dev-qa-db-fra.com

Comment puis-je créer une barre au bas d'une application Java, comme une barre d'état?

Je suis en train de créer une application Java et j'aimerais avoir une barre en bas de l'application, dans laquelle j'affiche une barre de texte et une barre d'état (progression).

Seulement, je n'arrive pas à trouver le contrôle dans NetBeans et je ne connais pas non plus le code à créer manuellement.

52
Paintrick

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 à barres d'état ci-dessus sur ma machine:

enter image description here

102
krock

Malheureusement, Swing n'a pas de support natif pour StatusBars. Vous pouvez utiliser un BorderLayout et une étiquette ou tout ce que vous devez afficher en bas:

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

Puis dans votre 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

6
Simon

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

Voici comment vous l'utiliseriez:

  1. Téléchargez le JAR qu'ils fournissent et mettez-le dans votre chemin de classe
  2. La barre d'état divise en interne la zone de la barre en 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. Instanciez la barre d'état comme 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. Ajoutez maintenant le statusBar ci-dessus au panneau principal que vous avez (BorderLayout et réglez-le sur le côté sud).

Voir un exemple de capture d'écran d'une des applications sur lesquelles je travaille ici (il a 2 zones). Faites-moi savoir si vous rencontrez des problèmes ...

4
arcamax

Je recommanderais le composant de la barre d'état dans la bibliothèque SwingX - Voici le document API pour la la barre d'état est ici

n bon exemple de son utilisation est ici.

S'amuser.

2
Richard Walton

Pour un look plus moderne que la réponse acceptée, optez pour un GridBagLayout et un JSeparator:

JPanel outerPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.PAGE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.weighty = 0;

JPanel menuJPanel = new JPanel();
menuJPanel.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.RED));
outerPanel.add(menuJPanel, gbc);

gbc.insets = new Insets(5, 5, 5, 5);
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1;

JPanel contentJPanel = new JPanel();
contentJPanel.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLUE));
outerPanel.add(contentJPanel, gbc);

gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weighty = 0;
gbc.insets = new Insets(0, 0, 0, 0);

outerPanel.add(new JSeparator(JSeparator.HORIZONTAL), gbc);
outerPanel.add(new JPanel(), gbc);

screenshot of the result

0
t.animal