ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java Swing GridBagLayout – 添加没有空格的按钮

2019-07-27 22:01:10  阅读:252  来源: 互联网

标签:gridbaglayout java swing layout-manager


如何删除gridBagLayout引起的间距并使它们粘在一起?
这是我的代码只需添加3个按钮.
我读了这个问题,但没有完整的解决方案How to fix gap in GridBagLayout;
我只想将所有按钮放在JFrame的顶部.

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyProblem {

    private JFrame frame = new JFrame();

    public static void main(String[] args) {
        new MyProblem();
    }

    public MyProblem() {
        frame.setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();
        gc.weightx = 1;
        gc.weighty = 1;
        gc.gridx = 0;
        gc.gridy = 0;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.anchor = GridBagConstraints.NORTH;
        for (int i = 0; i < 3; i++) {
            JPanel jPanel = new JPanel(new BorderLayout());
            jPanel.setSize(80, 80);
            jPanel.add(new JButton("Button " + i),BorderLayout.PAGE_START);
            frame.add(jPanel, gc);
            gc.gridy++;
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }

}

我的按钮如何:

我希望我的按钮看起来像:

解决方法:

布局会产生一列按钮,所以..

更改:

        gc.fill = GridBagConstraints.HORIZONTAL;

至:

        gc.fill = GridBagConstraints.BOTH;

编辑1

I want to keep buttons to the same height as described in picture and just putting them at the top.

使用组合布局将它们限制在顶部相当容易.在这种情况下,我们可能会将带有按钮的面板添加到带有BorderLayout的面板的PAGE_START中.边框布局的那一部分将拉伸子组件的宽度(我们的面板与GridLayout)来填充可用空间,但它将尊重其中任何内容的高度 – 为组件提供所需的垂直空间.

编辑2

这是一个实现上述想法的MCVE.外面板(带有青色边框)用于约束按钮面板的高度(带橙色边框).有关其工作原理的更多详细信息,请参阅源代码中的注释.

    

import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;

public class MyProblem {

    private JFrame frame = new JFrame();

    public static void main(String[] args) {
        new MyProblem();
    }

    public MyProblem() {
        frame.setLayout(new BorderLayout()); // actually the default

        // we will use this panel to constrain the panel with buttons
        JPanel ui = new JPanel(new BorderLayout());
        frame.add(ui);
        ui.setBorder(new LineBorder(Color.CYAN, 3));

        // the panel (with GridLayout) for the buttons
        JPanel toolPanel = new JPanel(new GridLayout(0,1,0,4)); // added some gap
        toolPanel.setBorder(new LineBorder(Color.ORANGE, 3));
        // toolPanel will appear at the top of the ui panel
        ui.add(toolPanel, BorderLayout.PAGE_START); 
        for (int i = 0; i < 3; i++) {
            toolPanel.add(new JButton("Button " + i));
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setSize(500, 500); // instead..
        frame.pack(); // pack will make it as small as it can be.
        frame.setMinimumSize(frame.getSize()); // nice tweak..
        frame.setVisible(true);
    }
}

标签:gridbaglayout,java,swing,layout-manager
来源: https://codeday.me/bug/20190727/1558450.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有