我正在创建一个 Java 应用程序,并且想要一个酒吧 在应用程序的底部,我在其中显示一个文本栏和一个状态(进度)栏。
只是我似乎无法在 NetBeans 中找到该控件,也不知道要手动创建的代码。
使用 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);
这是上述状态栏代码在我的机器上的结果:
不幸的是 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
我使用了L2FProd的swing库。他们提供的状态栏库非常好。
以下是如何使用它:
状态栏内部将栏区域划分为区域。每个区域可以包含一个组件(JLabel、JButton 等)。想法是用所需的区域和组件填充栏。
实例化状态栏如下....
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%", "*"}
);
现在将上面的
statusBar
添加到您拥有的主面板中(BorderLayout并将其设置为南侧)。请参阅我正在开发的应用程序之一的示例屏幕截图此处(它有 2 个区域)。如果您遇到任何问题,请告诉我......
为了比接受的答案更现代的外观,请使用 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);
您应该使用您正在处理的框架的Layered Pane:
JPanel statusPanel = new JPanel();
statusPanel.setBorder(new MatteBorder(1, 0, 0, 0, Color.gray));
statusPanel.setLayout(new BorderLayout());
statusPanel.setMinimumSize(new Dimension(0, 16));
statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.X_AXIS));
statusPanel.add(statusIcon, LEFT_ALIGNMENT);
statusPanel.add(statusLabel);
rootPane.add(statusPanel, BorderLayout.SOUTH);
getLayeredPane().setLayout(new BorderLayout());
getLayeredPane().add(statusPanel, BorderLayout.SOUTH);