Java Swing网格布局拉伸?

Java Swing网格布局拉伸?,java,swing,layout-manager,grid-layout,Java,Swing,Layout Manager,Grid Layout,因此,我有下面的Java代码,它生成了您在图像中看到的内容。布局和我想要的差不多,除了按钮被拉伸成相同大小和填充。如果不像其他答案所建议的那样使用GridBagLayout,有没有办法避免这种情况?我试着把里面面板的尺寸调小一些,但还是被拉长了 代码: //Set-up main window JFrame mainwindow = new JFrame(); mainwindow.setSize(500, 500); mainwindow.setTitle("E

因此,我有下面的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();
结果:

    //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();

出于上述原因,不要以这种方式使用
setSize()
。相反,让每个组件采用它的首选尺寸和
pack()
封闭的
窗口
。在这种情况下,将每个按钮添加到具有默认
FlowLayout
的面板,该面板符合首选大小,如图所示

出于上述原因,不要以这种方式使用
setSize()
。相反,让每个组件采用它的首选尺寸和
pack()
封闭的
窗口
。在这种情况下,将每个按钮添加到具有默认
FlowLayout
的面板,该面板符合首选大小,如图所示

出于上述原因,不要以这种方式使用
setSize()
。相反,让每个组件采用它的首选尺寸和
pack()
封闭的
窗口
。在这种情况下,将每个按钮添加到具有默认
FlowLayout
的面板,该面板符合首选大小,如图所示

出于上述原因,不要以这种方式使用
setSize()
。相反,让每个组件采用它的首选尺寸和
pack()
封闭的
窗口
。在这种情况下,将每个按钮添加到具有默认
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);
            }
        });
    }        
}
我不知道你到底想要这个布局,所以我用自己的方式创建了它。 文本字段水平增长,两个按钮水平增长 与中心对齐


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);
            }
        });
    }        
}
我不知道你到底想要这个布局,所以我用自己的方式创建了它。 文本字段水平增长,两个按钮水平增长 与中心对齐


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);
            }
        });
    }        
}
我不知道你到底想要这个布局,所以我用自己的方式创建了它。 文本字段水平增长,两个按钮水平增长 与中心对齐


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);
            }
        });
    }        
}
我不知道你到底想要这个布局,所以我用自己的方式创建了它。 文本字段水平增长,两个按钮水平增长 与中心对齐


布局看起来很奇怪,但一个“简单”的解决方案(与GridBagLayout相比)可能是将按钮包装到JPanel中,每个按钮都有一个FlowLayout。那么每个按钮都会在自己的JPanel中,并带有Flow layout?然后,我会将每个组件添加到另一个JPanel中,以添加到选项卡?使用您可能应该在更多中描述