2010-06-14 18 views

Respuesta

97

Crea un JFrame o JPanel con BorderLayout, dale algo así como BevelBorder o un borde de línea para que se separe del resto del contenido y luego agrega el panel de estado en 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); 

Aquí es el resultado del código barra de estado anteriormente en mi máquina:

enter image description here

+16

gracias a Dios, este es el único código de barra de estado de Java útil en todos los internets –

+1

no funcionó para mí, la barra de estado terminó en el medio de la ventana –

+0

Necesita usar un diseño diferente dentro del JPanel.Como en el fragmento de código anterior, BoxLayout arrojará el resultado como en la imagen. –

6

Desafortunadamente oscilación no tiene soporte nativo para barras de estado. Se puede utilizar una y una etiqueta BorderLayout o lo que usted necesita para mostrar en la parte inferior:

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

Luego, en su panel principal:

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

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

+0

Usar JPanel, en lugar de JLabel para una barra de estado, es una idea mucho mejor. –

+0

@Bozhidar Batsov: Sí, lo es. – Simon

2

recomendaría el componente de la barra de estado en el SwingX library - Aquí está el doc de la API para el status bar is here

A good example of its use is here.

Have fun.

+4

Insertar todo el SwingX para un componente que es trivial de implementar no me parece la mejor idea ... Si ya está usando SwingX en la aplicación, está bien, pero de lo contrario es una exageración completa ... –

4

He utilizado la biblioteca del oscilación a partir del L2FProd. La biblioteca de la barra de estado que han proporcionado es muy buena.

A continuación se muestra cómo se usa:

  1. Descargar el archivo JAR que están proporcionando y la puso en la ruta de clases
  2. La barra de estado se divide internamente en la zona del bar zona. Cada zona puede contener un Componente (JLabel, JButton, etc.). Idea es llenar la barra con las zonas requeridas y los componentes.

  3. una instancia de la barra de estado de la siguiente manera ....

    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. Ahora suma lo anterior statusBar al panel principal que tiene (BorderLayout y la ajuste en el lado sur).

Ver una captura de pantalla de ejemplo de una de las aplicaciones que estoy trabajando here (tiene 2 zonas). Avísame si enfrentas algún problema ...

+2

La captura de pantalla es un enlace muerto. – GKFX

Cuestiones relacionadas