Как я могу создать панель в нижней части приложения Java, например строку состояния?
Я нахожусь в процессе создания Java-приложения и хотел бы иметь бар в нижней части приложения, в котором я отображаю текстовую строку и строку состояния (прогресса).
только я не могу найти элемент управления в NetBeans и не знаю код для создания вручную.
5 ответов:
создайте JFrame или JPanel с BorderLayout, дайте ему что-то вроде BevelBorder или линия границы, так что он отделен от остальной части содержимого, а затем добавить панель состояния на BorderLayout.ЮГ.
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
я использовал библиотеку swing от L2FProd. Библиотека строки состояния, которую они предоставили, очень хороша.
ниже, как вы будете использовать его:
- загрузите банку, которую они предоставляют, и поместите ее в свой classpath
строка состояния внутренне делит область бара на зоны. Каждая зона может содержать компонент (надписи, 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 зоны). Дайте мне знать, если у вас возникнут какие-либо проблемы....
Я бы рекомендовал компонент строки состояния в библиотека SwingX - вот API doc для строка состояния здесь
хороший пример его использования здесь.
получать удовольствие.
для более современного вида, чем принятый ответ, Идите с 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);