我需要一个基本的简单Java布局方法 [英] I need a basic simple Java layout method
问题描述
我在互联网上查了一下 FlowLayout
, Group
等等,所有这些都是无用的例子。我只需要一种基本的方法来为我的Java应用程序做一个好的布局。我会告诉你我的代码:
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);
//----------------------------------------------------------------------
}
}
这是一个基本的gui,它有一些标签和一些文本字段,.pack()方法它们将在同一个文本中显示线,我只需要一个简单的小方法来制作一个好的布局
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
推荐答案
太多静态由于很多原因,代码中的code>变量不是理想的解决方案。尝试使用不同的方法,除非您不考虑为
项目
制作一个 Factory Class
。看看这个修改过的版本,这还不错:
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();
}
});
}
}
这是输出:
这篇关于我需要一个基本的简单Java布局方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!