webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Leiste im unteren Bereich einer Java App wie eine Statusleiste erstellen?

Ich bin gerade dabei, eine Java App zu erstellen und möchte eine Leiste am unteren Rand der App haben, in der ich eine Textleiste und eine Statusleiste (Fortschrittsleiste) anzeige.

Nur kann ich das Steuerelement in NetBeans scheinbar nicht finden, und ich weiß auch nicht, welchen Code ich manuell erstellen soll.

52
Paintrick

Erstellen Sie einen JFrame oder ein JPanel mit einem BorderLayout, geben Sie ihm einen BevelBorder oder einen Linienrand, damit er vom Rest des Inhalts getrennt ist, und fügen Sie dann das Statusfenster bei BorderLayout.SOUTH hinzu.

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

Hier ist das Ergebnis des obigen Status-Barcodes auf meinem Computer:

enter image description here

102
krock

Leider hat Swing keine native Unterstützung für StatusBars. Sie können ein BorderLayout und eine Bezeichnung verwenden oder was auch immer Sie unten anzeigen möchten:

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

Dann in Ihrem Hauptfenster:

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

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

6
Simon

Ich habe die Swing-Bibliothek von L2FProd verwendet. Die von ihnen bereitgestellte Statusleistenbibliothek ist sehr gut.

Nachfolgend sehen Sie, wie Sie es verwenden würden:

  1. Laden Sie die JAR-Datei herunter, die sie bereitstellen, und fügen Sie sie in Ihren Klassenpfad ein
  2. Die Statusleiste unterteilt den Balkenbereich intern in Zonen. Jede Zone kann eine Komponente enthalten (JLabel, JButton usw.). Idee ist es, die Leiste mit den erforderlichen Zonen und den Komponenten zu füllen.

  3. Instanziieren Sie die Statusleiste wie folgt ....

    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. Fügen Sie nun das obige statusBar zum Hauptfenster hinzu (BorderLayout und stellen Sie es auf die Südseite).

Sehen Sie sich einen Beispiel-Screenshot von einer der Apps an, an denen ich arbeite hier (es hat 2 Zonen). Lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben ...

4
arcamax

Ich würde die Statusleisten-Komponente in der SwingX-Bibliothek empfehlen - Hier ist das API-Dokument für die Statusleiste

Ein gutes Beispiel für seine Verwendung ist hier.

Habe Spaß.

2
Richard Walton

Für einen moderneren Look als die akzeptierte Antwort, verwenden Sie ein GridBagLayout und einen 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