所以我有以下Java代码,它可以生成您在图像中看到的内容。布局几乎是我想要的,除了按钮拉伸到相同的大小和填充。反正有没有像其他答案建议那样使用GridBagLayout来避免这种情况?我尝试将面板内部的尺寸设置为较小的尺寸,但无论如何它都被拉伸了。
代码:
//Set-up main window
JFrame mainwindow = new JFrame();
mainwindow.setSize(500, 500);
mainwindow.setTitle("Example");
//Add components
JTabbedPane tabs = new JTabbedPane();
GridLayout experimentLayout = new GridLayout(0,2,0,5);
JPanel pnl_Logon = new JPanel();
pnl_Logon.setLayout(experimentLayout);
JLabel lbl_Username = new JLabel("Username: ");
JLabel lbl_Password = new JLabel("Password: ");
JTextField txt_Username = new JTextField(10);
JPasswordField psw_Password = new JPasswordField(10);
JButton btn_Logon = new JButton("Logon");
JButton btn_Clear = new JButton("Clear");
pnl_Logon.add(lbl_Username);
pnl_Logon.add(txt_Username);
pnl_Logon.add(lbl_Password);
pnl_Logon.add(psw_Password);
pnl_Logon.add(btn_Logon);
pnl_Logon.add(btn_Clear);
tabs.addTab("Logon", pnl_Logon);
//Draw window
mainwindow.add(tabs);
mainwindow.show();
结果:
答案 0 :(得分:2)
由于提到here的原因,请勿以这种方式使用setSize()
。相反,让每个组件采用它的首选大小和pack()
封闭的Window
。在这种情况下,请将每个按钮添加到具有默认FlowLayout
的面板,该面板尊重首选尺寸,如here所示。
答案 1 :(得分:1)
GridLayout
经理不尊重最低,最低和最高
其子女的大小值。 GridLayout
中的所有单元格都具有相同的大小。
每个单元的大小等于具有最大组件的单元的大小。
它不是一个非常有用的管理器,很少能用于实际应用程序。
但它似乎做的是制造混乱。
您提到您想避开GridBagLayout
经理。但那里
还有很多其他选择。这种布局可以很容易地实现
灵活的经理。
我为MigLayout
经理提供了一个简单的解决方案。 MigLayout
是基于网格的
布局管理器也可以在几行中轻松创建这种布局。
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutLogin extends JFrame {
public MigLayoutLogin() {
initUI();
setTitle("Log in");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("ins 15"));
add(new JLabel("User name:"));
add(new JTextField(10), "pushx, growx, wrap");
add(new JLabel("Password: "));
add(new JPasswordField(10), "growx, wrap");
add(new JButton("Log in"), "span 2, split 2, center, gaptop 15");
add(new JButton("Log out"));
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutLogin ex = new MigLayoutLogin();
ex.setVisible(true);
}
});
}
}
我不知道你究竟想要这个布局,所以我按照我的方式创建了它。 文本字段水平增长,两个按钮水平 与中心对齐。