2015-09-09 3 views
1

Я пытаюсь создать довольно простое приложение с JSplitPane (которое разделено на JTabbedPane и JPanel) над панелью состояния. Я хочу использовать простой макет (например, BoxLayout, FlowLayout или BorderLayout), но я пробовал, и все они дают мне ту же ошибку. Я максимально упростил код, чтобы показать ошибку.BoxLayout Отображается неправильно

Ошибка в том, что в макете основного блока (рама) должны быть только две области: верхняя часть (с JSplitPane, которая имеет черную границу) и нижнюю часть (со строкой состояния JPanel). Однако, когда я добавляю строку состояния, в верхнем левом углу создается третий регион, который ничего не содержит. Любые идеи о том, как избавиться от него?

public static void main(String[] args) { 
    JFrame frame = new JFrame("Application"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); 

    // Create left side of the application 
    JTabbedPane tabby = new JTabbedPane(JTabbedPane.LEFT); 

    // Create right side of the application 
    JPanel rightPanel = new JPanel(new BorderLayout()); 

    // Create the status bar at the bottom 
    JPanel statusBar = new JPanel(new BorderLayout()); 
    JPanel statusBarPanel = new JPanel(); 
    statusBarLabel = new JLabel("Status Bar"); 
    statusBarPanel.add(statusBarLabel); 
    parent.add(statusBarPanel); 

    JSplitPane mainPain = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tabby, rightPanel); 
    frame.add(mainPain); 
    frame.add(statusBar); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

Application with 3 segments.

ответ

5

Я пытаюсь создать довольно простое приложение, которое имеет (который Панель с разделителем разделен на JTabbedPane и JPanel) выше панели строки состояния.

Обычно вы бы просто использовать по умолчанию BorderLayout кадра, а затем сделать:

frame.add(splitPane, BorderLayout.CENTER); 
frame.add(statusBar, BorderLayout.PAGE_END); 

Строка состояния, как правило, один или несколько меток, которые отображают информацию таким образом, они являются отображением в фиксированном размере на дно.

Другая панель будет содержать основные компоненты приложения. Эти компоненты затем получат дополнительное пространство для кадра при его изменении.

но я пробовал и все они дают мне ту же ошибку

parent.add(statusBarPanel); 

переменная «родитель» не существует. Избавиться от этого. Добавьте строку состояния в рамку, как показано выше.

+0

Работал отлично! Спасибо! – ifyadig

0

не уверен, если это так, но кажется, что вы добавляете 2 панели при добавлении панели состояния. У вас есть statusBarPanel, который добавляется к «parent» и statusBar, который добавляется к самому кадру. Возможно, это ваша 3-я панель.

Смежные вопросы