I'm new to JAVA and GUI. I'm making a GUI screen for my project.
I made a GridLayout
with 2 rows. First row has a FlowLayout
and 2nd row has a BoxLayout
. The panel with the FlowLayout
will be constant throughout the program, whereas the panel with BoxLayout
might vary. I've enclosed another panel inside the BoxLayout
panel with a GridBagLayout
. Whenever I'm adding another panel to the BoxLayout
, the space between the 1st row and the 2nd row of the GridLayout
is increasing.
Can anyone tell me what should I do to stop this from happening?
Is there any way such that the
radioButton
can be placed in the centre of the panel?
Here is the code:
* 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();
}
}