Java Swing GridLayout拉伸了吗?

时间:2014-07-07 15:23:11

标签: java swing layout-manager grid-layout

所以我有以下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 Layout

2 个答案:

答案 0 :(得分:2)

由于提到here的原因,请勿以这种方式使用setSize()。相反,让每个组件采用它的首选大小和pack()封闭的Window。在这种情况下,请将每个按钮添加到具有默认FlowLayout的面板,该面板尊重首选尺寸,如here所示。

image

答案 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);
            }
        });
    }        
}

我不知道你究竟想要这个布局,所以我按照我的方式创建了它。 文本字段水平增长,两个按钮水平 与中心对齐。

Log in