2016-01-14 2 views
0

Я занят написанием графического интерфейса Java Swing, и мне нужно два JPanes Side by Side.Java Swing JPanel FlowLayout Проблемы с высотой

У меня есть единый JPane, который я использую в качестве родителя JPane, который держит двух детей JPanes, которые сидят бок о бок, каждый с границей для разделения.

Каждый ребенок JPane имеет JPane внутри с GridBagLayout для элементов позиционирования. Мой код выглядит следующим образом

import javax.swing.*; 
import java.awt.*; 

public class JavaGui extends JFrame { 

    public static void main(String[] args) { 

     JavaGui window = new JavaGui(); 

     // setup window here 

     // main panels  

     JPanel container = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     JPanel panelLeft = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     JPanel panelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); 

     window.add(container); 
     container.add(panelLeft); 
     container.add(panelRight); 

     // grid layout panels 

     JPanel leftGrid = new JPanel(new GridBagLayout()); 
     JPanel rightGrid = new JPanel(new GridBagLayout()); 
     GridBagConstraints grid = new GridBagConstraints(); 

     panelLeft.add(leftGrid); 
     panelRight.add(rightGrid); 

     // test labels 

     JLabel label01 = new JLabel("Label 01"); 
     JLabel label02 = new JLabel("Label 02"); 
     JLabel label03 = new JLabel("Label 03"); 
     JLabel label04 = new JLabel("Label 04"); 

     // add labels to grids 

     grid.gridx = 0; 
     grid.gridy = 0; 
     leftGrid.add(label01, grid); 
     grid.gridx = 0; 
     grid.gridy = 0; 
     rightGrid.add(label02, grid); 
     grid.gridx = 0; 
     grid.gridy = 1; 
     rightGrid.add(label03, grid); 
     grid.gridx = 0; 
     grid.gridy = 2; 
     rightGrid.add(label04, grid); 

     // add borders to see sizes 

     panelLeft.setBorder(BorderFactory.createLineBorder(Color.black)); 
     panelRight.setBorder(BorderFactory.createLineBorder(Color.black)); 

    }; 

}; 

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

ТОК

enter image description here

можно ли получить эти панели, чтобы быть на той же высоте?

REQUIRED

enter image description here

+0

Почему вы используете leftGrid и rightGrid не было бы проще, если вы добавили ваши ярлыки на панели панели и панели справа? – NAIT

ответ

2

Я предлагаю вам попробовать следующее:

import javax.swing.*; 
import java.awt.*; 

public class JavaGui extends JFrame { 

    public static void main(String[] args) { 

     JavaGui window = new JavaGui(); 

     // setup window here 

     // main panels  

     JPanel container = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     JPanel panelLeft = new JPanel(new GridBagLayout()); 
     JPanel panelRight = new JPanel(new GridBagLayout()); 
     JPanel centralPanel = new JPanel(new GridLayout(1, 2)); 
     centralPanel.add(panelLeft); 
     centralPanel.add(panelRight); 
     window.add(container); 
     container.add(centralPanel); 

     // grid layout panels 

     GridBagConstraints grid = new GridBagConstraints(); 


     // test labels 

     JLabel label01 = new JLabel("Label 01"); 
     JLabel label02 = new JLabel("Label 02"); 
     JLabel label03 = new JLabel("Label 03"); 
     JLabel label04 = new JLabel("Label 04"); 

     // add labels to grids 

     grid.gridx = 0; 
     grid.gridy = 0; 
     panelLeft.add(label01, grid); 
     grid.gridx = 0; 
     grid.gridy = 0; 
     panelRight.add(label02, grid); 
     grid.gridx = 0; 
     grid.gridy = 1; 
     panelRight.add(label03, grid); 
     grid.gridx = 0; 
     grid.gridy = 2; 
     panelRight.add(label04, grid); 

     // add borders to see sizes 

     panelLeft.setBorder(BorderFactory.createLineBorder(Color.black)); 
     panelRight.setBorder(BorderFactory.createLineBorder(Color.black)); 
     window.setVisible(true); 
     window.pack(); 
    }; 

}; 
+0

Это хорошее решение, хотя я не понимаю, как это работает – Trent

+0

Просто, если вы хотите, чтобы ваши компоненты были равными, используйте GridLayout, проверьте [doc] (https://docs.oracle.com/javase /7/docs/api/java/awt/GridLayout.html). – NAIT

2

Создать leftgrid и rightgrid использованием GridLayout со строками и столбцами параметры
JPanel leftGrid = новые JPanel (новая GridLayout (3, 3));
JPanel rightGrid = новый JPanel (новая GridLayout (3, 3)); `