I've checked the internet about FlowLayout, Group etc., all with unhelpful examples. I just need a basic way to do a good layout for my Java application. I'll show you my code:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class Test1 {
//Step1 - Declaring variables
private static JFrame myFrame;
private static JPanel myPanel;
private static JLabel titleLabel=null;
private static JLabel logIn=null;
private static JLabel username=null;
private static JLabel password=null;
private static JTextField usernameField=null;
private static JPasswordField passwordField=null;
private static Color myColor=new Color(0, 102, 204);
private static Font myFont11=new Font("Tahoma", 1, 11);
private static Font myFont12bold=new Font("Tahoma", Font.BOLD, 12);
private static Font myFont11bold=new Font("Tahoma", Font.BOLD, 11);
//Step2 - Creating Components
public void createComponents() {
//Title Label
titleLabel=new JLabel("My Program");
titleLabel.setForeground(Color.white);
titleLabel.setFont(myFont12bold);
//titleLabel.setVisible(false); //hide it or show it
//--------------------------------------------------------
logIn=new JLabel("Log in");
logIn.setFont(myFont11bold);
logIn.setForeground(Color.white);
username=new JLabel("Username");
username.setLabelFor(usernameField);
username.setFont(myFont11);
username.setForeground(Color.white);
password=new JLabel("Password");
password.setLabelFor(passwordField);
password.setFont(myFont11);
password.setForeground(Color.white);
usernameField=new JTextField(10);
usernameField.setBorder(new LineBorder(null, 0, false));
passwordField=new JPasswordField(10);
passwordField.setBorder(new LineBorder(null, 0, false));
//Panel
myPanel=new JPanel();
myPanel.setBackground(myColor);
myPanel.add(titleLabel);
myPanel.add(logIn);
myPanel.add(mySeparator2);
myPanel.add(username);
myPanel.add(usernameField);
myPanel.add(password);
myPanel.add(passwordField);
//----------------------------------------------------------
//Step3 - Main Function
public static void main(String[] arg) {
//Frame
myFrame=new JFrame();
myFrame.setPreferredSize(new Dimension(400,300));//width:400px, height:300px
myFrame.setLocationRelativeTo(null);//to show at center of screen
myFrame.setTitle("My Program");
Test1 prog=new Test1();
prog.createComponents();
myFrame.add(myPanel);
myFrame.pack();//this alone will not give the frame a size
myFrame.setVisible(true);
//----------------------------------------------------------------------
}
}
This is a basic gui which has some labels and some textfields, with the .pack() method they will be shown on the same line, I just need a small simple way to make a good layout
Too many static variables inside your code is not an ideal solution for many a reasons. Try to use a different approach, until and unless you not thinking about making one Factory Class for your Project. Have a look at this modified version, is this good enough :
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class Test1 {
//Step1 - Declaring variables
private JFrame myFrame;
// Added by me
private JPanel contentPane;
private JPanel myPanel;
private JLabel username=null;
private JLabel password=null;
private JTextField usernameField=null;
private JPasswordField passwordField=null;
private Color myColor=new Color(200, 102, 204);
private Font myFont11=new Font("Tahoma", 1, 11);
private Font myFont12bold=new Font("Tahoma", Font.BOLD, 12);
private Font myFont11bold=new Font("Tahoma", Font.BOLD, 11);
//Step2 - Creating Components
public void createComponents() {
contentPane = new JPanel();
contentPane.setOpaque(true);
contentPane.setBackground(Color.WHITE);
contentPane.setLayout(new GridBagLayout());
contentPane.setBorder(BorderFactory.createTitledBorder("My Program"));
username=new JLabel("Username");
username.setLabelFor(usernameField);
username.setFont(myFont11);
username.setForeground(Color.white);
password=new JLabel("Password");
password.setLabelFor(passwordField);
password.setFont(myFont11);
password.setForeground(Color.white);
usernameField=new JTextField(10);
usernameField.setBorder(new LineBorder(null, 0, false));
passwordField=new JPasswordField(10);
passwordField.setBorder(new LineBorder(null, 0, false));
//Panel
myPanel=new JPanel();
myPanel.setOpaque(true);
myPanel.setBorder(BorderFactory.createTitledBorder("Login"));
myPanel.setBackground(myColor);
myPanel.setLayout(new GridLayout(2, 2, 2, 2));
myPanel.add(username);
myPanel.add(usernameField);
myPanel.add(password);
myPanel.add(passwordField);
//----------------------------------------------------------
contentPane.add(myPanel);
myFrame=new JFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//myFrame.setPreferredSize(new Dimension(400,300));//width:400px, height:300px
myFrame.setLocationRelativeTo(null);//to show at center of screen
myFrame.setTitle("My Program");
//myFrame.add(myPanel);
myFrame.setContentPane(contentPane);
myFrame.pack();//this alone will not give the frame a size
myFrame.setVisible(true);
}
//Step3 - Main Function
public static void main(String[] arg) {
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new Test1().createComponents();
}
});
}
}
Here is the output :

1) you have an issue with debuging, java conventions and packaging methods and classes, you have and issues with
2) add a new curly brace
}//add this one
public static void main(String[] arg) {
}
}
3) built the Swing GUI in Initail Thread, then your main class should be
public static void main(String[] arg) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myFrame = new JFrame();
myFrame.setPreferredSize(new Dimension(400, 300));//width:400px, height:300px
myFrame.setLocationRelativeTo(null);//to show at center of screen
myFrame.setTitle("My Program");
Test1 prog = new Test1();
prog.createComponents();
myFrame.add(myPanel);
myFrame.pack();//this alone will not give the frame a size
myFrame.setVisible(true);
}
});
}
4) setSize for JFrame and then usage of pack(); is contraproductive use pack() rather than setSize
5) you have look at SpringLayout, or GridBagLayout in the case that you will put there more the similair JComponents,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With