2015-09-19 3 views
0

Я создаю интерфейс для небольшой игры/упражнения. В этом интерфейсе я получил верхний раздел, ведь это JPanel, который занимает ширину окна и определенную высоту. Прямо под ним находится другая секция (JPanel снова), которая, как предполагается, выровняется по левому краю и подбирается под первой секцией.Как правильно выровнять два JPanel внутри JFrame

Я изо всех сил старался сделать интерфейс похожим на то, что я хочу. Я пробовал две вещи, но не удалось:

Первое, что у меня есть класс GameView, который расширяет JFrame, и я создаю JPanel для обоих разделов и напрямую добавляю их в JFrame, но похоже, что они просто заканчиваются друг друга. Черный раздел является первым и один красным является второй один:

The result of my first method

второй вещь, которую я пытался ставлю оба этих JPanel внутри Иной JPanel называют контейнер, но до сих пор не понимает, что я хотеть. Первый раздел является совершенным, но второй должен придерживаться слева, и я хотел бы не иметь пространство между двумя секциями:

The result of my second method

Как я могу вставить второй секции (красный один) к слева и не имеют пробела между двумя разделами? Вот код моего класса:

пакетная игра;

import java.awt.Color; 

import javax.swing.GroupLayout; 
import javax.swing.GroupLayout.Alignment; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

    public class GameView extends JFrame //implements MouseListener 
    { 
     private GameNumView numberPanel; 
     private JLabel butLabel; 
     private JLabel progresLabel; 
     private JButton nextButton; 
     private JButton giveUpButton; 
     private JButton resetButton; 
     private JCheckBox findMeanCheckBox; 
     private JCheckBox noiseCheckBox; 

     public GameView() 
     { 
      initUI(); 
     } 

     public void initUI() 
     { 
      setTitle("Sommurai"); 

      setSize(800, 350); 

      setLocationRelativeTo(null); 

      butLabel = new JLabel("97"); 
      progresLabel = new JLabel("Somme: 90 (2)"); 

      nextButton = new JButton("NEXT"); 
      giveUpButton = new JButton("GIVE UP"); 
      resetButton = new JButton("RESET"); 

      findMeanCheckBox = new JCheckBox("Find Mean"); 
      noiseCheckBox = new JCheckBox("Noise"); 

      createLayout(butLabel, progresLabel, nextButton, giveUpButton, resetButton, findMeanCheckBox, noiseCheckBox); 

      setDefaultCloseOperation(EXIT_ON_CLOSE); 
     } 

     private void createLayout(JComponent... arg) 
     { 
      JPanel container = new JPanel(); 

      numberPanel = new GameNumView(800, 120); 

      JPanel buttonsPanel = new JPanel(); 
      GroupLayout gl = new GroupLayout(buttonsPanel); 
      buttonsPanel.setLayout(gl); 

      gl.setAutoCreateContainerGaps(true); 

      GroupLayout.SequentialGroup hGroup = gl.createSequentialGroup(); 

      GroupLayout.SequentialGroup vGroup = gl.createSequentialGroup(); 

      hGroup.addGroup(gl.createParallelGroup() 
        .addComponent(arg[0]) 
        .addComponent(arg[1]) 
        .addComponent(arg[2]) 
        .addComponent(arg[3]) 
        .addComponent(arg[4]) 
        .addComponent(arg[5]) 
        .addComponent(arg[6])); 

      gl.setHorizontalGroup(hGroup); 

      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[0])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[1])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[2])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[3])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[4])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[5])); 
      vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE) 
        .addComponent(arg[6])); 

      gl.setVerticalGroup(vGroup); 

    buttonsPanel.setBackground(Color.RED);// 

      container.add(numberPanel); 
      container.add(buttonsPanel); 
      add(container); 
     } 
    } 

GameNumView является другой класс, который является JPanel

+1

[Как использовать GridLayout] (https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html), [Как использовать GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) или [Как использовать BorderLayout] (https://docs.oracle.com/javase /tutorial/uiswing/layout/border.html) – MadProgrammer

ответ

-1

Я согласен с использованием BorderLayout, но установить BorderLayout на раме.

this.setLayout(new BorderLayout()); 

Затем установите два JPanels в северной и центральной

this.add(panel1, BorderLayout.NORTH); 
this.add(panel2, BorderLayout.CENTER); 
+0

Вы приняли этот ответ? Почему не мое? Вы попросили, чтобы он держался слева от центральной панели. Это не влево ... – feltersnach

0

Вместо того, чтобы использовать макет группы BorderLayout(). Сделайте красную панель BorderLayout.LEFT и другую BorderLayout.CENTER.

Пример:

JPanel container = new JPanel(); 
JFrame frame = new JFrame(); 
frame.add (container, BorderLayout.LEFT); 
Смежные вопросы