Я новичок в JAVA и GUI. Я создаю экран графического интерфейса для моего проекта.Почему вертикальный разрыв GridLayout продолжает расти?
Я сделал GridLayout
с 2 рядами. Первая строка имеет FlowLayout
, а вторая строка имеет номер BoxLayout
. Панель с FlowLayout
будет постоянной во всей программе, тогда как панель с BoxLayout
может отличаться. Я включил другую панель внутри панели BoxLayout
с номером GridBagLayout
. Всякий раз, когда я добавляю другую панель в BoxLayout
, пространство между 1-й строкой и 2-й строкой GridLayout
увеличивается.
Может ли кто-нибудь сказать мне, что мне делать, чтобы это не случилось?
Есть ли способ, чтобы
radioButton
можно было разместить в центре панели?
Вот код:
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
/**
*
* @author arindamchowdhury
*/
public class ScreenTwo {
JRadioButton[] radioButton;
public ScreenTwo() {
start();
}
private void start() {
JFrame frame = new JFrame();
JPanel panel1 = new JPanel();
frame.getContentPane().add(panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Added a panel to the frame with GridLayout. It has 2 rows, and 1 column.
panel1.setLayout(new GridLayout(2, 1, 1, 1));
Font font = new Font("Times New Roman", Font.PLAIN, 25);
JPanel panel2 = new JPanel();
panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 1));
// *** Making a header section using FlowLayout *** //
panel2.add(new JLabel("Flight ID"));
panel2.add(new JLabel("Departure"));
panel2.add(new JLabel("Arrival"));
panel2.add(new JLabel("Total Duration "));
changeFont(panel2, font);
panel1.add(panel2);
// Making the 2nd row of GridLayout, a BoxLayout, so that components are added vertically.
JPanel panel3 = new JPanel();
panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
panel3.setBorder(BorderFactory.createLineBorder(Color.BLACK));
GridBagConstraints c = new GridBagConstraints();
// When I increase comboSize, the space increases
int comboSize = 1, i;
JPanel panelCombo[] = new JPanel[comboSize];
ButtonGroup group = new ButtonGroup();
radioButton = new JRadioButton[comboSize];
for(i=0; i<comboSize; i++) {
panelCombo[i] = new JPanel();
panelCombo[i].setLayout(new GridBagLayout());
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(0, 0, 0, 100);
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
c.gridheight = 4;
panelCombo[i].add(new JLabel("Hi"), c);
// *** Added a RadioButton *** //
c.gridx++;
radioButton[i] = new JRadioButton();
panelCombo[i].add(radioButton[i]);
group.add(radioButton[i]);
c.gridheight = 1;
c.gridx = 1;
c.gridy++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx = 0;
c.gridy++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx = 1;
c.gridy++;
panelCombo[i].add(new JLabel("Hi"), c);
c.gridx++;
panelCombo[i].add(new JLabel("Hi"), c);
panel3.add(panelCombo[i]);
changeFont(panelCombo[i], font);
panelCombo[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
panel1.add(panel3);
frame.pack();
frame.setVisible(true);
}
// *** A function to change the font of all components of a container *** //
private void changeFont (Component component, Font font) {
component.setFont (font);
if (component instanceof Container)
{
for (Component child : ((Container) component).getComponents())
{
changeFont (child, font);
}
}
}
public static void main(String[] args)
{
ScreenTwo sc = new ScreenTwo();
}
}
Такой хороший, подробное объяснение. Спасибо вам большое за это. Я царапаю голову с утра. У меня просто есть сомнения относительно решения. У 'GridLayout' теперь есть нулевые строки и 1 столбец, поэтому, когда я добавляю к нему 2 панели, почему они не помещаются друг над другом? – Arindam
@Arindam См. [Javadoc on 'GridLayout'] (https://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html). если вы не можете найти ответ, я дам вам подсказку. Также подсказка: когда проблемы с компоновкой окрашивают все панели/контейнеры/компоненты по-разному, чтобы вы могли видеть, где находится пространство. – user1803551
Я думаю, что это ответ: один, но не каждый из строк и столбцов может быть равен нулю, а это означает, что «любое количество объектов может быть помещено в строку или в столбец». Не так ли? И спасибо за удобный наконечник, это действительно сэкономит много хлопот. – Arindam