【发布时间】:2014-08-10 19:23:51
【问题描述】:
我是 Java 的初学者。我希望在 Swings 中获得帮助来定位我的组件。
我无法决定应该使用哪个布局管理器来按以下顺序放置组件
+-----------------------------------+
| |
| Username Text Field |
| Password Password Field |
| |
| Submit button |
| |
+-----------------------------------+
以下是我的代码
package ssst;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class Test implements ActionListener{
JButton submit;
JFrame j;
JFrame jf;
public Test()
{
j = new JFrame("PLAIN");
j.setBounds(500,150,300,400);
JPanel panel = new JPanel();
j.add(panel);
GridBagLayout gb = new GridBagLayout();
panel.setLayout(gb);
GridBagConstraints c = new GridBagConstraints();
JLabel label = new JLabel("User Name");
c.gridx=0;
c.gridy=0;
c.fill=GridBagConstraints.HORIZONTAL;
c.anchor=GridBagConstraints.WEST;
c.ipadx=5;
c.ipady=5;
c.insets= new Insets(7,7,7,7);
panel.add(label,c);
JTextField username = new JTextField(10);
c.gridx=1;
c.gridy=0;
c.fill=GridBagConstraints.HORIZONTAL;
c.anchor=GridBagConstraints.WEST;
c.ipadx=5;
c.insets= new Insets(7,7,7,7);
panel.add(username,c);
JLabel password= new JLabel("Password");
c.gridx=0;
c.gridy=1;
c.fill=GridBagConstraints.HORIZONTAL;
c.anchor=GridBagConstraints.WEST;
c.ipadx=5;
c.insets= new Insets(7,7,7,7);
panel.add(password,c);
JPasswordField pass = new JPasswordField(10);
c.gridx=1;
c.gridy=1;
c.fill=GridBagConstraints.HORIZONTAL;
c.anchor=GridBagConstraints.WEST;
c.insets= new Insets(7,7,7,7);
panel.add(pass,c);
submit = new JButton("Submit");
c.gridx=1;
c.gridy=6;
c.fill=GridBagConstraints.HORIZONTAL;
c.anchor=GridBagConstraints.WEST;
c.insets= new Insets(7,7,7,7);
panel.add(submit,c);
submit.addActionListener(this);
j.setVisible(true);
j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
j.setVisible(false);
jf = new JFrame("NEw Window");
jf.setVisible(true);
jf.setBounds(500,150,300,400);
JPanel panel2 = new JPanel();
panel2.setLayout(null);
jf.add(panel2);
JButton logout = new JButton("LOGOUT");
logout.setBounds(100, 30, 400, 30);
panel2.add(logout);
logout.addActionListener(new Test2());
jf.setDefaultCloseOperation(j.EXIT_ON_CLOSE);
}
class Test2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
jf.dispose();
j.setVisible(true);
}
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new Test();
}
}
);
}
}
【问题讨论】:
-
我认为这可以使用
new GridLayout(3, 2)轻松完成,但也可以使用GridBagLayout、SpringLayout或MigLayout(最后一个不是JDK 的一部分)。 -
@ZiaKhan,请不要使用空布局,请考虑使用 GridBagLayout 来满足您当前的需求,how to use
-
完全是 Gridbag:madbean.com/anim/totallygridbag
-
我会结合使用三个布局管理器:BorderLayout 作为父布局; CENTER 位置是带有 SpringLayout 的 JPanel(使用 Swing 教程中的实用程序代码轻松创建网格),用于带有标签的输入字段,PAGE_END 位置是 JPanel,按钮具有居中的 FlowLayout。
-
希望thread 对这个话题有所帮助:-)
标签: java swing layout layout-manager