如何在Java应用程序的底部创建一个条,如状态栏?

时间:2010-06-14 08:34:25

标签: java swing netbeans statusbar

我正在创建一个Java应用程序,并希望有一个吧 在应用程序的底部,我在其中显示文本栏和状态(进度)栏。

我似乎无法在NetBeans中找到控件,也不知道要手动创建的代码。

5 个答案:

答案 0 :(得分:102)

创建一个带有BorderLayout的JFrame或JPanel,给它类似BevelBorder或行边框的内容,使其与其余内容分开,然后在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);

以下是我的机器上的上述状态条形码的结果:

enter image description here

答案 1 :(得分:6)

不幸的是,Swing没有对StatusBars的原生支持。 您可以使用BorderLayout和标签或底部显示的任何内容:

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

然后在主面板中:

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

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

答案 2 :(得分:4)

我使用了来自L2FProd的swing库。他们提供的状态栏库非常好。

以下是如何使用它:

  1. 下载他们提供的JAR并将其放入您的类路径
  2. 状态栏在内部将条形区域划分为区域。每个区域都可以包含一个组件(JLabel,JButton等)。想法是用必要的区域和组件填充栏。

  3. 实例化状态栏如下....

    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. 现在将上面的statusBar添加到您拥有的主面板(BorderLayout并将其设置为南侧)。

  5. 查看我正在处理here的其中一个应用的示例屏幕截图(它有2个区域)。如果您遇到任何问题,请告诉我....

答案 3 :(得分:2)

我会推荐SwingX library中的状态栏组件 - 这是status bar is here

的API文档

A good example of its use is here.

玩得开心。

答案 4 :(得分:0)

对于比接受的答案更现代的外观,请使用GridBagLayout和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