Java JFrame组件';s的大小和位置
我正在学习Java JFrame组件';s的大小和位置,java,swing,jframe,gridbaglayout,Java,Swing,Jframe,Gridbaglayout,我正在学习GridBagLayout并做了非常简单的布局,附带了两个非常小的混淆 1-按钮的大小我使用了New.setPreferredSize(新尺寸(70,23))是使所有按钮大小相同的标准方法吗 2-组件的放置看起来不太好 现在看,组件的所有侧面都有更多的填充,因此如何从左上角将其正确放置,我应该减小JFrame的大小吗?还是使用frame.pack()两者都有效,但不知道什么是标准做法(我尝试了pagestart等) 这就是我的代码的外观 frame= new JFrame("
GridBagLayout
并做了非常简单的布局,附带了两个非常小的混淆1-
按钮的大小
我使用了New.setPreferredSize(新尺寸(70,23))代码>是使所有按钮大小相同的标准方法吗
2-组件的放置看起来不太好
现在看,组件的所有侧面都有更多的填充
,因此如何从左上角将其正确放置,我应该减小JFrame的大小吗?
还是使用frame.pack()代码>两者都有效,但不知道什么是标准做法(我尝试了pagestart
等)
这就是我的代码的外观
frame= new JFrame("Hello ");
frame.setSize(300, 150);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(this);
frame.setResizable(false);
frame.setLocation(0, 0);
p1= new JPanel (new GridBagLayout());
gbc = new GridBagConstraints();
lblname= new JLabel("Name");
gbc.gridx=0;
gbc.gridy=0;
p1.add(lblname, gbc);
textname = new JTextField(11);
gbc.gridx=1;
gbc.gridy=0 ;
p1.add(textname, gbc);
New= new JButton("New");
gbc.gridx=2;
gbc.gridy=0;
New.setPreferredSize(new Dimension(70,23));
p1.add(New, gbc);
lblEmail = new JLabel("Email ");
gbc.gridx=0;
gbc.gridy=1;
p1.add(lblEmail , gbc);
TextEmail = new JTextField(11);
gbc.gridx=1;
gbc.gridy=1;
p1.add(TextEmail,gbc);
Edit = new JButton("Edit") ;
gbc.gridx= 2 ;
gbc.gridy=1;
Edit.setPreferredSize(new Dimension(70,23));
p1.add(Edit , gbc);
lblgender= new JLabel("Gender");
gbc.gridx=0;
gbc.gridy=2;
p1.add(lblgender, gbc);
TextGender= new JTextField(11);
gbc.gridx=1;
gbc.gridy=2;
p1.add(TextGender, gbc);
Gender= new JButton("Gender");
gbc.gridx=2;
gbc.gridy=2;
Gender.setPreferredSize(new Dimension(70,23));
p1.add(Gender, gbc);
pre= new JButton("<<");
gbc.gridx=0;
gbc.gridy=3;
p1.add(pre, gbc);
count = new JTextField(5);
gbc.gridx=1;
gbc.gridy=3;
p1.add(count, gbc);
next= new JButton(">>");
gbc.gridx=2;
gbc.gridy=3;
next.setPreferredSize(new Dimension(70,23));
p1.add(next, gbc);
p1.setVisible(true);
frame.add(p1);
frame.setVisible(true);
frame=newjframe(“你好”);
框架。设置尺寸(300150);
frame.setDefaultCloseOperation(JFrame.DO\u NOTHING\u ON\u CLOSE);
frame.addWindowListener(这个);
frame.setresizeable(false);
帧设置位置(0,0);
p1=新的JPanel(新的GridBagLayout());
gbc=新的GridBagConstraints();
lblname=新的JLabel(“名称”);
gbc.gridx=0;
gbc.gridy=0;
p1.添加(lblname,gbc);
textname=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=0;
p1.添加(文本名称,gbc);
新建=新建按钮(“新建”);
gbc.gridx=2;
gbc.gridy=0;
新的.setPreferredSize(新尺寸(70,23));
p1.增加(新的,gbc);
lblEmail=新的JLabel(“电子邮件”);
gbc.gridx=0;
gbc.gridy=1;
p1.添加(lblEmail,gbc);
text电子邮件=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=1;
p1.添加(文本电子邮件,gbc);
编辑=新按钮(“编辑”);
gbc.gridx=2;
gbc.gridy=1;
编辑.setPreferredSize(新尺寸(70,23));
p1.添加(编辑,gbc);
lblgender=新JLabel(“性别”);
gbc.gridx=0;
gbc.gridy=2;
p1.添加(lblgender,gbc);
text性别=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=2;
p1.添加(文本性别,gbc);
性别=新钮扣(“性别”);
gbc.gridx=2;
gbc.gridy=2;
性别:setPreferredSize(新维度(70,23));
p1.增加(性别、性别、性别);
pre=新的JButton(“”);
gbc.gridx=2;
gbc.gridy=3;
setPreferredSize(新维度(70,23));
p1.添加(下一步,gbc);
p1.setVisible(真);
帧。添加(p1);
frame.setVisible(true);
GridBagLayout
会让你发疯,它也是JDK中最灵活的布局管理器之一
不要害怕使用复合布局。在下面的示例中,我将导航控件移到了自己的面板中,这使得定义复杂布局变得更加容易(您也可以通过这种方式混合布局管理器)
GridBagConstraints#fill
允许您确定如何在单元格中填充组件。您有GridBagConstraints。水平,GridBagConstraints。垂直和GridBagConstraints。两者都有。。。我认为它的意思是不言自明的
在下面的示例中,我使用了GridBagConstraints.HORIZONTAL
来允许按钮填充其单元格/列中的所有可用空间
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
public class TestLayout20 {
public static void main(String[] args) {
new TestLayout20();
}
public TestLayout20() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
JLabel lblname = new JLabel("Name");
gbc.gridx = 0;
gbc.gridy = 0;
add(lblname, gbc);
JTextField textname = new JTextField(11);
gbc.gridx = 1;
gbc.gridy = 0;
add(textname, gbc);
JLabel lblEmail = new JLabel("Email ");
gbc.gridx = 0;
gbc.gridy = 1;
add(lblEmail, gbc);
JTextField TextEmail = new JTextField(11);
gbc.gridx = 1;
gbc.gridy = 1;
add(TextEmail, gbc);
JLabel lblgender = new JLabel("Gender");
gbc.gridx = 0;
gbc.gridy = 2;
add(lblgender, gbc);
JTextField TextGender = new JTextField(11);
gbc.gridx = 1;
gbc.gridy = 2;
add(TextGender, gbc);
JButton New = new JButton("New");
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(0, 12, 0, 0);
gbc.gridx = 2;
gbc.gridy = 0;
add(New, gbc);
JButton edit = new JButton("Edit");
gbc.gridx = 2;
gbc.gridy = 1;
add(edit, gbc);
JButton Gender = new JButton("Gender");
gbc.gridx = 2;
gbc.gridy = 2;
add(Gender, gbc);
JPanel pnlNav = new JPanel(new GridBagLayout());
gbc.insets = new Insets(12, 0, 0, 0);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(pnlNav, gbc);
JTextField count = new JTextField(5);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
pnlNav.add(count, gbc);
JButton pre = new JButton("<<");
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
gbc.gridx = 0;
gbc.gridy = 0;
pnlNav.add(pre, gbc);
JButton next = new JButton(">>");
gbc.anchor = GridBagConstraints.EAST;
gbc.gridx = 2;
gbc.gridy = 0;
pnlNav.add(next, gbc);
}
}
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.border.LineBorder;
公共类TestLayout20{
公共静态void main(字符串[]args){
新的TestLayout20();
}
公共测试布局20(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(ClassNotFoundException ex){
}catch(实例化异常){
}捕获(非法访问例外){
}捕获(无支持的LookandFeelexception ex){
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.anchor=GridBagConstraints.WEST;
JLabel lblname=新JLabel(“名称”);
gbc.gridx=0;
gbc.gridy=0;
添加(lblname,gbc);
JTextField textname=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=0;
添加(文本名称,gbc);
JLabel lblEmail=新的JLabel(“电子邮件”);
gbc.gridx=0;
gbc.gridy=1;
添加(lblEmail,gbc);
JTextField textmail=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=1;
添加(文本电子邮件,gbc);
JLabel lblgender=新JLabel(“性别”);
gbc.gridx=0;
gbc.gridy=2;
添加(lblgender,gbc);
JTextField TextGender=新的JTextField(11);
gbc.gridx=1;
gbc.gridy=2;
添加(文本性别,gbc);
JButton New=新JButton(“新”);
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.插图=新插图(0,12,0,0);
gbc.gridx=2;
gbc.gridy=0;
新增(新增,gbc);
JButton edit=新JButton(“编辑”);
gbc.gridx=2;
gbc.gridy=1;
添加(编辑,gbc);
JButton性别=新JButton(“性别