Как я могу создать панель в нижней части Java-приложения, например строку состояния? - PullRequest
52 голосов
/ 14 июня 2010

Я нахожусь в процессе создания Java-приложения и хотел бы иметь панель в нижней части приложения, в которой я отображаю текстовую панель и строку состояния (прогресса).

Только яКажется, я не могу найти элемент управления в NetBeans, и я не знаю код для создания вручную.

Ответы [ 5 ]

102 голосов
/ 14 июня 2010

Создайте JFrame или JPanel с BorderLayout, присвойте ему что-то вроде 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

6 голосов
/ 14 июня 2010

К сожалению, 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 / creation-a-status-bar.html

4 голосов
/ 14 июня 2010

Я использовал библиотеку свингов из L2FProd .Предоставленная ими библиотека строки состояния очень хороша.

Ниже описано, как ее использовать:

  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 и установите его на южную сторону).

См. Пример экрана из одного из приложений, над которыми я работаю здесь (имеет 2 зоны).Дайте мне знать, если у вас возникнут какие-либо проблемы ....

2 голосов
/ 14 июня 2010

Я бы порекомендовал компонент строки состояния в библиотеке SwingX - Вот документация API для строки состояния здесь

Хороший пример его использования здесь.

Веселитесь.

0 голосов
/ 07 мая 2018

Для более современного взгляда, чем принятый ответ, используйте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...