Java DesignGridLayout超出了边界

Java DesignGridLayout超出了边界,java,swing,user-interface,layout,layout-manager,Java,Swing,User Interface,Layout,Layout Manager,我的问题是,这段代码生成了一个Swing GUI,超出了我笔记本电脑的显示范围。为什么? 它使用DesignGridLayout作为布局库 这是从中的答案中提取的代码: import javax.swing.JButton; 导入javax.swing.JComboBox; 导入javax.swing.JFrame; 导入javax.swing.JInternalFrame; 导入javax.swing.JLabel; 导入javax.swing.JPanel; 导入javax.swing.JS

我的问题是,这段代码生成了一个Swing GUI,超出了我笔记本电脑的显示范围。为什么? 它使用DesignGridLayout作为布局库

这是从中的答案中提取的代码:

import javax.swing.JButton;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JInternalFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.jsepator;
导入javax.swing.JTable;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
导入javax.swing.table.DefaultTableModel;
导入net.java.dev.designgridlayout.designgridlayout;
公开课演示{
私有void createAndShowGUI(){
JLabel i5l1=新JLabel(“运费明细”);
JLabel i5l2=新JLabel(“日期:”);
JLabel i5l3=新JLabel(“车辆编号:”);
JLabel i5l4=新JLabel(“From:”);
JLabel i5l5=新JLabel(“项目:”);
JLabel i5l6=新的JLabel(“数量”);
JLabel i5l7=新JLabel(“Kg”);
JLabel i5l8=新JLabel(“费率:卢比”);
JLabel i5l15=新JLabel(“销售详情”);
JLabel i5l16=新JLabel(“现金销售:卢比”);
JLabel i5l17=新JLabel(“信用证:卢比”);
JLabel i5l18=新JLabel(“费用”);
JLabel i5l19=新JLabel(“食品和茶叶:Rs.”);
JLabel i5l20=新JLabel(“工资:卢比”);
JLabel i5l21=新JLabel(“杂项费用:卢比”);
JTextField i5t1=新的JTextField(20);
JTextField i5t2=新的JTextField(20);
JTextField i5t3=新的JTextField(20);
JTextField i5t4=新的JTextField(20);
JTextField i5t11=新的JTextField(20);
JTextField i5t12=新的JTextField(20);
JTextField i5t13=新的JTextField(20);
JTextField i5t14=新的JTextField(20);
JComboBox i5cb1=新的JComboBox();
JComboBox i5cb2=新的JComboBox();
JComboBox i5cb3=新的JComboBox();
JButton i5b1=新JButton(“保存”);
JButton i5b2=新JButton(“重置”);
JButton i5b3=新JButton(“关闭”);
jsepator i5sep1=新的jsepator();
jsepator i5sep2=新的jsepator();
jsepator i5sep3=新的jsepator();
jsepator i5sep4=新的jsepator();
jsepator i5sep5=新的jsepator();
jsepator i5sep6=新的jsepator();
对象[]columnNames=新对象[]{“Column#1”、“Column#2”、“Column#3”、“Column#4”};
DefaultTableModel=新的DefaultTableModel(columnNames,10);
JTable table=新的JTable(模型);
JScrollPane i5t1sp1=新JScrollPane(表);
JPanel-freightPanel=新的JPanel();
DesignGridLayout layout1=新的DesignGridLayout(freightPanel);
layout1.row().left().add(i5sep1.fill().withOwnRowWidth();
布局1.row().center().add(i5l1);
layout1.row().left().add(i5sep2.fill().withOwnRowWidth();
layout1.row().grid(i5l2).add(i5t1);
layout1.row().grid(i5l3).add(i5t2);
layout1.row().grid(i5l4).add(i5cb1);
layout1.row().grid(i5l5).add(i5cb2);
layout1.row().grid(i5l6).add(i5t3).add(i5l7);
layout1.row().grid(i5l8).add(i5t4);
layout1.row().left().add(i5sep5.fill().withOwnRowWidth();
布局1.row().center().add(i5l18);
layout1.row().left().add(i5sep6.fill().withOwnRowWidth();
layout1.row().grid(i5l19).add(i5t12);
layout1.row().grid(i5l20).add(i5t13);
layout1.row().grid(i5l21).add(i5t14);
JPanel salePanel=新的JPanel();
DesignGridLayout layout2=新的DesignGridLayout(salePanel);
layout2.row().left().add(i5sep3.fill().withOwnRowWidth();
layout2.row().center().add(i5l15);
layout2.row().left().add(i5sep4.fill().withOwnRowWidth();
layout2.row().grid(i5l16).add(i5t11);
layout2.row().grid(i5l17).add(i5cb3);
layout2.row().grid().add(i5t1sp1);
JInternalFrame internalFrame=新的JInternalFrame(“每日分析”,真,真,真,真);
DesignGridLayout mainLayout=新的DesignGridLayout(internalFrame.getContentPane());
mainLayout.row().grid().add(货运面板).add(销售面板);
mainLayout.row().left().add(新JSepator()).fill().withOwnRowWidth();
mainLayout.row().center().add(i5b1).add(i5b2).add(i5b3);
internalFrame.pack();
internalFrame.setVisible(true);
JFrame=新JFrame(“演示”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(internalFrame);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新建演示().createAndShowGUI();
}
});
}
}
好吧,为什么不呢


pack()
使帧采用正确显示其所有子组件所需的大小(根据其首选大小并满足最小/最大限制),如果要显示的内容太多和/或分辨率不够大,则窗口可能会超出屏幕范围。如果框架最大化,这将是一个令人惊讶的问题。

无论代码中是否有pack(),GUI都会超出范围。为什么这些组件占用这么多空间?@user3422747对于我来说,没有两个(!)包,框架的大小为0。但是,是的,核心“问题”是组件需要占用大量空间。原因取决于组件的性质和布局管理器(DesignGridLayout)。例如,尝试在
mainloayout
上禁用前两行的adds,这样您就只有
mainLa了
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import net.java.dev.designgridlayout.DesignGridLayout;

public class Demo {

    private void createAndShowGUI() {

        JLabel i5l1 = new JLabel("FREIGHT DETAILS");
        JLabel i5l2 = new JLabel("Date : ");
        JLabel i5l3 = new JLabel("Vehicle No. : ");
        JLabel i5l4 = new JLabel("From : ");
        JLabel i5l5 = new JLabel("Item : ");
        JLabel i5l6 = new JLabel("Quantity : ");
        JLabel i5l7 = new JLabel("Kg.");
        JLabel i5l8 = new JLabel("Rate :                                          Rs.");
        JLabel i5l15 = new JLabel("SALE DETAILS");
        JLabel i5l16 = new JLabel("Cash Sales :                             Rs. ");
        JLabel i5l17 = new JLabel("Credit :                                       Rs. ");
        JLabel i5l18 = new JLabel("EXPENSES");
        JLabel i5l19 = new JLabel("Food & Tea :                            Rs. ");
        JLabel i5l20 = new JLabel("Wages :                                   Rs. ");
        JLabel i5l21 = new JLabel("Miscellaneous Expenses :     Rs. ");

        JTextField i5t1 = new JTextField(20);
        JTextField i5t2 = new JTextField(20);
        JTextField i5t3 = new JTextField(20);
        JTextField i5t4 = new JTextField(20);
        JTextField i5t11 = new JTextField(20);
        JTextField i5t12 = new JTextField(20);
        JTextField i5t13 = new JTextField(20);
        JTextField i5t14 = new JTextField(20);

        JComboBox i5cb1 = new JComboBox<>();
        JComboBox i5cb2 = new JComboBox<>();
        JComboBox i5cb3 = new JComboBox<>();

        JButton i5b1 = new JButton("Save");
        JButton i5b2 = new JButton("Reset"); 
        JButton i5b3 = new JButton("Close");

        JSeparator i5sep1 = new JSeparator();
        JSeparator i5sep2 = new JSeparator();
        JSeparator i5sep3 = new JSeparator();
        JSeparator i5sep4 = new JSeparator();
        JSeparator i5sep5 = new JSeparator();
        JSeparator i5sep6 = new JSeparator();

        Object[] columnNames = new Object[]{"Column # 1", "Column # 2", "Column # 3", "Column # 4"};
        DefaultTableModel model = new DefaultTableModel(columnNames, 10);
        JTable table = new JTable(model);

        JScrollPane i5t1sp1 = new JScrollPane(table);

        JPanel freightPanel = new JPanel();
        DesignGridLayout layout1 = new DesignGridLayout(freightPanel);

        layout1.row().left().add(i5sep1).fill().withOwnRowWidth();
        layout1.row().center().add(i5l1);
        layout1.row().left().add(i5sep2).fill().withOwnRowWidth();
        layout1.row().grid(i5l2).add(i5t1);
        layout1.row().grid(i5l3).add(i5t2);
        layout1.row().grid(i5l4).add(i5cb1);
        layout1.row().grid(i5l5).add(i5cb2);
        layout1.row().grid(i5l6).add(i5t3).add(i5l7);
        layout1.row().grid(i5l8).add(i5t4);

        layout1.row().left().add(i5sep5).fill().withOwnRowWidth();
        layout1.row().center().add(i5l18);
        layout1.row().left().add(i5sep6).fill().withOwnRowWidth();
        layout1.row().grid(i5l19).add(i5t12);
        layout1.row().grid(i5l20).add(i5t13);
        layout1.row().grid(i5l21).add(i5t14);

        JPanel salePanel = new JPanel();
        DesignGridLayout layout2 = new DesignGridLayout(salePanel);

        layout2.row().left().add(i5sep3).fill().withOwnRowWidth();
        layout2.row().center().add(i5l15);
        layout2.row().left().add(i5sep4).fill().withOwnRowWidth();
        layout2.row().grid(i5l16).add(i5t11);
        layout2.row().grid(i5l17).add(i5cb3);
        layout2.row().grid().add(i5t1sp1);

        JInternalFrame internalFrame = new JInternalFrame("Daily Analysis",true,true, true, true);        

        DesignGridLayout mainLayout = new DesignGridLayout(internalFrame.getContentPane());
        mainLayout.row().grid().add(freightPanel).add(salePanel);
        mainLayout.row().left().add(new JSeparator()).fill().withOwnRowWidth();
        mainLayout.row().center().add(i5b1).add(i5b2).add(i5b3);

        internalFrame.pack();
        internalFrame.setVisible(true);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(internalFrame);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Demo().createAndShowGUI();
            }
        });
    }
}