簡體   English   中英

Java Swing GridLayout拉伸了嗎?

[英]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();

結果:

Java布局

由於此處提到的原因,請勿以這種方式使用setSize() 取而代之的是,讓每個組件采用其首選的大小,並pack()封閉的Window 在這種情況下,每個按鈕添加到具有默認面板FlowLayout ,哪些方面優選的尺寸,如圖所示在這里

圖片

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM