Я создаю интерфейс для небольшой игры/упражнения. В этом интерфейсе я получил верхний раздел, ведь это JPanel, который занимает ширину окна и определенную высоту. Прямо под ним находится другая секция (JPanel снова), которая, как предполагается, выровняется по левому краю и подбирается под первой секцией.Как правильно выровнять два JPanel внутри JFrame
Я изо всех сил старался сделать интерфейс похожим на то, что я хочу. Я пробовал две вещи, но не удалось:
Первое, что у меня есть класс GameView, который расширяет JFrame, и я создаю JPanel для обоих разделов и напрямую добавляю их в JFrame, но похоже, что они просто заканчиваются друг друга. Черный раздел является первым и один красным является второй один:
второй вещь, которую я пытался ставлю оба этих JPanel внутри Иной JPanel называют контейнер, но до сих пор не понимает, что я хотеть. Первый раздел является совершенным, но второй должен придерживаться слева, и я хотел бы не иметь пространство между двумя секциями:
Как я могу вставить второй секции (красный один) к слева и не имеют пробела между двумя разделами? Вот код моего класса:
пакетная игра;
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
[Как использовать 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