2016-10-29 2 views
0

Так что у меня есть проблема, что я должен сделать вопросник о чем-то, и мне нужно использовать несколько макетов.Мои рамы занимают большую часть пространства availbe

Моя проблема заключается в том, что когда я добавляю 2 JPanels в макет сетки (только на одну сторону), моя первая панель занимает большую часть пространства.

Код:

public class MainFrame extends JFrame implements ItemListener{ 
     JPanel mainPanel,rightSideAge,rightSideGender,leftSide,rightSideBox,leftSideBox; 
     JTextArea nameArea; 
     JSpinner ageSpinner; 
     JRadioButton genMale,genFema; 
     ButtonGroup genderGroup; 

    MainFrame(){ 
     this.setSize(1000, 800); 
     this.setLocationRelativeTo(null); 
     this.setTitle("Közvélemény kutatás a zenei ízlésekről"); 
     mainPanel = new JPanel(new GridLayout(0, 2)); 
     this.setContentPane(mainPanel); 

     /* --- RIGHT PANEL --- */ 
     rightSideBox = new JPanel(); 
     rightSideBox.setLayout(new BoxLayout(rightSideBox, BoxLayout.Y_AXIS)); 

     rightSideAge = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     rightSideAge.setBorder(BorderFactory.createLineBorder(Color.BLUE)); 
     //rightSide.setLayout(new BoxLayout(rightSide, BoxLayout.Y_AXIS)); 
     mainPanel.add(rightSideBox); 

      //Age label 
     //JLabel labelAge = new JLabel("Kor: "); 
     //labelAge.setSize(100, 30); 
      //Age Spinner 
     ageSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 120, 1)); 
     ageSpinner.setPreferredSize(new Dimension(40, 20)); 
     Component mySpinnerEditor = ageSpinner.getEditor(); 
     JFormattedTextField jftf = ((JSpinner.DefaultEditor) mySpinnerEditor).getTextField(); 
     jftf.setColumns(5); 

      //New box for zenei ízlés 
     rightSideGender = new JPanel(); 
     rightSideGender.setBorder(BorderFactory.createLineBorder(Color.GREEN)); 
     rightSideGender.setLayout(new BoxLayout(rightSideGender,BoxLayout.Y_AXIS)); 

      //Gender ComboBox 
      genderGroup = new ButtonGroup(); 
      genMale = new JRadioButton("Férfi"); 
      genderGroup.add(genMale); 
      genFema = new JRadioButton("Nő"); 
      genderGroup.add(genFema); 

     /* --- LEFT SIDE --- */ 

     rightSideBox.setBorder(BorderFactory.createLineBorder(Color.RED)); 


     /* ADD STUFF TO PANELS */ 
      /* RightSideBox */ 
      rightSideBox.add(rightSideAge); 
      rightSideBox.add(rightSideGender); 
       /*RIGHT SIDE PANELS*/ 
       rightSideGender.add(new JLabel("Nem:")); 
       rightSideGender.add(genMale); 
       rightSideGender.add(genFema); 
       rightSideAge.add(new JLabel("Kor")); 
       //rightSide.add(labelAge); 
       rightSideAge.add(ageSpinner); 
       /*LEFT SIDE PANEL*/ 

     this.setVisible(true); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

Голубой коридор sould только под JSpinner:

https://i.stack.imgur.com/xF5At.png

+0

Пожалуйста ВЫВЕШУ [MCVE]: вывесить голый минимум, чтобы показать проблему. (Написание минимального футляра - хорошая методика отладки. При этом вы, вероятно, решите свою проблему.) – c0der

+0

Также нарисуйте какую-то картинку, которая показывает нам графический интерфейс GUI, который вы хотите. –

+0

http://imgur.com/a/1K9sF Вот что я хотел бы сделать. Цвета показывают разные границы. – BenjiVok

ответ

0
ageSpinner.setPreferredSize(new Dimension(40, 20)); 

Прежде всего, вы не должны вручную устанавливать размер компонента. Каждый компонент Swing отвечает за определение собственного размера.

Голубой коридор должен быть только под JSpinner:

Компоновка окно размеры компонента до максимального размера, если есть свободное место. По какой-то причине JSpinner не имеет максимальной высоты, поэтому он расширяется для заполнения всего доступного пространства.

Чтобы исправить это, вы можете сделать что-то вроде:

//ageSpinner.setPreferredSize(new Dimension(40, 20)); 
ageSpinner.setMaximumSize(ageSpinner.getPreferredSize()); 
0

mainPanel макет установлен в две колонки:

mainPanel = new JPanel(new GridLayout(0, 2)); 

только Вы добавьте одну панель в mainPanel, который использует GridLayout:

mainPanel.add(rightSideBox); 

Примечание: первый компонент добавления, в этом случае rightSideBox будет занимать первый столбец, то есть он будет ЛЕВЫЙ один.

Чтобы добавить rightSideGender в mainPanel вам нужно:

mainPanel.add(rightSideGender); 

Второй компонент добавления, в этом случае rightSideGender будет занимать вторую колонку, в этом случае правильный.

+0

Появляется, но Nem (зеленая рамка) находится не в правильном положении. – BenjiVok

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