我正在创建一个登录系统,当我创建登录按钮时,它占用了整个框架。我尝试了.setBounds();
,但它没有用。不确定我做错了什么,请帮忙。
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Main extends JFrame{
public Main(){
JTextField name = new JTextField("Username");
JTextField pass = new JTextField("Password");
JButton login = new JButton("Login");
name.setBounds(230, 110, 100, 25);
pass.setBounds(230, 145, 100, 25);
login.setBounds(230, 165, 100, 25);
add(name);
add(pass);
add(login);
}
public static void main(String [] args) {
Main a = new Main();
a.setDefaultCloseOperation(EXIT_ON_CLOSE);
a.setSize(500, 300);
a.setLocationRelativeTo(null);
a.setVisible(true);
a.setTitle("Login System");
a.setResizable(false);
a.setLayout(new FlowLayout());
}
}
答案 0 :(得分:2)
,尝试setLayout(new FlowLayout());
。
这可能不会导致你想要的东西,但从那里你可以进一步调查。我建议你在这里阅读布局: https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
答案 1 :(得分:1)
默认情况下,Frame安装了BorderLayout。添加项目后,它们全部添加到" center"因为约束没有通过。中心组件占用BorderLayout中的所有可用空间。您可以在添加组件时更改布局管理器或提供约束。
FlowLayout或BoxLayout是这方面的好选择。
答案 2 :(得分:1)
默认情况下,JFrame的布局管理器是BorderLayout。使用方法add()
添加组件后,它会添加到中心区域。因此显示了添加的最后一个组件。在您的情况下,它是登录按钮。此外setBounds()
不适用于所述布局管理器。
你必须在编码风格上做很多工作。你所做的是首先创建框架并添加组件,然后在main()
中设置大小,使其可见,然后将布局管理器设置为FlowLayout。
理想情况下,您必须构造框架,设置布局,向框架添加组件,使用pack()设置框架大小,设置框架的位置并最终使框架可见。
使用BorderLayout:
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Main());
}
@Override
public void run() {
JFrame frame = new JFrame("BorderLayout");
frame.getContentPane().add(new JTextField(15), BorderLayout.WEST);
frame.getContentPane().add(new JPasswordField(15), BorderLayout.CENTER);
frame.getContentPane().add(new JButton("Login"), BorderLayout.EAST);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
使用FlowLayout:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Main());
}
@Override
public void run() {
JFrame frame = new JFrame("FlowLayout");
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JTextField(15));
frame.getContentPane().add(new JPasswordField(15));
frame.getContentPane().add(new JButton("Login"));
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
P.S。如果您仍想使用绝对位置,我建议您使用SpringLayout或GroupLayout。