2010-06-14 1 views
50

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

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

ответ

97

Создайте 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

+16

Слава богу, это единственный полезный штрих-код состояния Java на всех интернетах –

+1

не работал для меня, строка состояния оказалась в середине window –

+0

Вам нужно использовать другой макет внутри JPanel.Как и в фрагменте кода выше, BoxLayout даст результат, как на картинке. –

6

К сожалению свинг не имеет нативную поддержку 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

+0

Использование JPanel вместо JLabel для строки состояния - это гораздо лучшая идея. –

+0

@Bozhidar Batsov: Да, это так. – Simon

2

Я бы рекомендовал компонент состояния в поле SwingX library. Ниже представлен документ API для status bar is here

A good example of its use is here.

Удачи.

+4

Тянуть во всем SwingX для компонента, который тривиально реализовать, не кажется лучшей идеей для меня ... Если вы уже используете SwingX в приложении, все в порядке, но в остальном это полный перебор ... –

4

я использовал swing библиотека из L2FProd. Библиотека строки состояния, которую они предоставили, очень хороша.

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

  1. Скачать JAR они предоставляют и положить его в пути к классам
  2. Строка состояния внутри делит площадь бара в зону. Каждая зона может содержать компонент (JLabel, JButton и т. Д.). Идея состоит в том, чтобы заполнить панель необходимыми зонами и компонентами.

  3. Instantiate строка состояния, как показано ниже ....

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

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

+2

Скриншот - это мертвая ссылка. – GKFX