I have a Jframe and I want to show grids as follows:
There are 3rows and in the 2nd row there are two columns.So,but when I add a Jlabel and Jtextfield in 2nd row,then the 2nd column of 2nd grid goes below the 2nd row and acts as 3rd column. For eg:
So "hello55"
needs to come side by side of the 2nd row,but it is coming downward as extra row in swing. How can I make it side to side?
So,I tried as:
public class AdminDashboard extends JFrame {
private JPanel panel,subPanel1;
public AdminDashboard() {
System.out.println("hello");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1000, 609);
panel=new JPanel();
panel.setLayout(new GridLayout(3,1,5,10));
JLabel labe11=new JLabel("hello11");
JLabel labe12=new JLabel("hello22");
JLabel labe13=new JLabel("hello33");
JLabel labe14=new JLabel("hello44");
JLabel labe15=new JLabel("hello55");
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
panel.add(labe11);
subPanel1 = new JPanel(); // sub-panel 1
subPanel1.setLayout(new GridLayout(0,2,5,10));
//creating form for 2nd row 1st column
JLabel userLabel = new JLabel("User");
userLabel.setBounds(10, 10, 80, 25);
subPanel1.add(userLabel);
JTextField userText = new JTextField(20);
userText.setBounds(100, 10, 80, 25);
subPanel1.add(userText);
JLabel passwordLabel = new JLabel("Password");
passwordLabel.setBounds(10, 40, 80, 25);
subPanel1.add(passwordLabel);
JPasswordField passwordText = new JPasswordField(20);
passwordText.setBounds(100, 40, 160, 25);
subPanel1.add(passwordText);
JButton loginButton = new JButton("login");
loginButton.setBounds(10, 80, 80, 25);
subPanel1.add(loginButton);
JButton registerButton = new JButton("register");
registerButton.setBounds(180, 80, 80, 25);
subPanel1.add(registerButton);
//2nd row 2nd column
subPanel1.add(labe15);
subPanel1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
subPanel1.setBackground(Color.red);
panel.add(subPanel1);
panel.add(labe13);
add(panel);
}
}
Advertisement
Answer
The below code simply sets up your desired GUI and nothing more. It is not a complete, working application. Explanations after the code.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class AdminDashboard implements Runnable {
private JFrame frame;
@Override
public void run() {
showGui();
}
private JPanel createBottomPanel() {
JPanel bottomPanel = new JPanel();
JLabel hello33 = new JLabel("hello33");
bottomPanel.add(hello33);
return bottomPanel;
}
private JPanel createFormPanel() {
JPanel formPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets.bottom = 5;
gbc.insets.left = 5;
gbc.insets.right = 5;
gbc.insets.top = 5;
JLabel userLabel = new JLabel("User");
formPanel.add(userLabel, gbc);
gbc.gridx = 1;
JTextField userTextField = new JTextField(6);
formPanel.add(userTextField, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
JLabel passwordLabel = new JLabel("Password");
formPanel.add(passwordLabel, gbc);
gbc.gridx = 1;
JPasswordField passwordField = new JPasswordField(6);
formPanel.add(passwordField, gbc);
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 0;
gbc.gridy = 2;
JButton loginButton = new JButton("login");
formPanel.add(loginButton, gbc);
gbc.gridx = 1;
JButton registerButton = new JButton("register");
formPanel.add(registerButton, gbc);
return formPanel;
}
private JPanel createMainPanel() {
JPanel mainPanel = new JPanel(new GridLayout(0, 2, 5, 10));
mainPanel.add(createFormPanel());
mainPanel.add(createTablePanel());
return mainPanel;
}
private JPanel createTablePanel() {
JPanel tablePanel = new JPanel();
JLabel hello55 = new JLabel("hello55");
tablePanel.add(hello55);
return tablePanel;
}
private JPanel createTopPanel() {
JPanel topPanel = new JPanel();
JLabel hello11 = new JLabel("hello11");
topPanel.add(hello11);
return topPanel;
}
private void showGui() {
frame = new JFrame("Admin Dashboard");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(createTopPanel(), BorderLayout.PAGE_START);
frame.add(createMainPanel(), BorderLayout.CENTER);
frame.add(createBottomPanel(), BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
/**
* Start here.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new AdminDashboard());
}
}
The default layout manager for the content pane of JFrame
is BorderLayout
. So I placed the hello11 as the top component and the hello33 as the bottom component.
In the center component I put a panel and set its layout manager to GridLayout
so that I could nest within it two panels side by side where the left panel is your form and the right panel is hello55.
For the panel displaying the [login] form, I used GridBagLayout
.
Here is a screen capture of the window displayed when running the above code.