GridBagLayout中的JTextArea窃取了太多空间

时间:2013-02-21 05:06:42

标签: java swing gridbaglayout

我有一个GridBagLayout,由于某种原因我的JTextArea已经决定它不想听格子袋的比例,当创建包含布局的面板时,我的文本框增长直到占用1/2屏幕。下面是一些代码:

        tp = new JTabbedPane();
        tp.setFont(Main.f);
        //Adds tabs with several buttosn to my tabbed pane
        for(Menu menu : FileManager.menus){
            JPanel tmp = new JPanel();
            int s = (int) Math.ceil(Math.sqrt(menu.products.size()));
            tmp.setLayout(new GridLayout(s,s));
            for(Product p : menu.products){//Act as
                p.setFont(Main.f);
                p.addActionListener(this);
                tmp.add(p);
            }
            tp.addTab(menu.name,null,tmp,null);
        }
        receipt.setBorder(BorderFactory.createEtchedBorder());

        //starting up with GridBag
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.ipadx = 0;
        gbc.ipady = 0;

        //sets up and adds the JTabbedPane
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 1;
        gbc.gridheight = 1;
        gbc.weightx = 0.8;
        gbc.weighty = 0.8;
        add(tp,gbc);

        //sets up and adds receipt - The one that takes up half the screen
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.weightx = 0.2;
        receipt.setEditable(false);
        receipt.setText("Ticket number: 0\n" +
                "Transaction number: 0\n");
        receipt.setLineWrap(true);
        add(receipt,gbc);

        //sets up and adds a JPanel that has a bunch of buttons on it(Uses gridlayout)
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridwidth = 2;
        gbc.gridheight = 1;
        gbc.weightx = 1;
        gbc.weighty = 0.2;
        add(buttons,gbc);

        buttons.setLayout(new GridLayout(1,8));
        createButton(newtable);
        createButton(remove);
        for(JButton a : quicks)
            createButton(a);
        createButton(pay);
        createButton(exit);

        revalidate();
        repaint();

当我将TextArea更改为空白JButton时,它根本不会占用太多空间。基本上,空间由右侧的物体填充。如何告诉gridbag我希望我的左对象跨越屏幕的4/5,而右边的对象跨越最后的1/5?在这个版本中,我尝试使用加权,在我的原始版本中,我尝试使用单元格,所以左边的对象是gridx = 0 gridwidth = 4,右边的对象是gridx = 4 gridwidth = 1

两种方式都没有效果。我也愿意接受其他想法(比如更好的布局,或JTable?)

感谢您的帮助,     大通

它正在做什么 What it does 应该做什么的尺寸 enter image description here

1 个答案:

答案 0 :(得分:2)

如果您没有精确定位4/5和1/5比例,则可以使用BorderLayout并将按钮放置到中心和文本区域到东部。

边框布局将显示您提供的文本区域 - 指定首选大小(宽度,您可以将高度设置为您想要的任何数字,边框布局将忽略它)。剩下的空间然后由按钮面板占用。

您可以在此处详细了解边框布局:http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html