[英]Java Swing GridLayout stretched?
因此,我有以下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();
結果:
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);
}
});
}
}
我不知道您到底多么想要這種布局,所以我以自己的方式創建了它。 文本字段水平增長,並且兩個按鈕水平對齊中心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.