【问题标题】:Java GUI Swing, buttons in GridLayout without space between buttonsJava GUI Swing,GridLayout中的按钮,按钮之间没有空格
【发布时间】:2016-09-16 18:57:58
【问题描述】:

我想创建一个按钮网格。按钮之间不应有空格,以便按钮接触下一个按钮。

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.*;
public class Bild extends JFrame { 
    public static class createButton extends JPanel { 
        public createButton() {
            JButton b = new JButton(); 
            Border border = new LineBorder(Color.BLACK, 1);
            b.setBorder(border);
            b.setBackground(Color.WHITE);
            b.setPreferredSize (new Dimension(10,10));
            this.add(b); 
        }
    }

    public Bild() {
        GridLayout layout = new GridLayout(10,10,0,0);
        this.setLayout(layout); 
        for (int i = 0; i < 100; i++) {
            this.add(new createButton());
        }
    }
}

import javax.swing.*; 
import java.awt.*; 
public class Main{
    public static void main (String[] args) {
        JFrame frame = new Bild();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setSize(500,500);
        frame.setVisible(true);
    }
}

通过网格布局,我尝试获得 10x10 的按钮网格。但是,尽管我使用参数 10,10,0,0 创建了 GridLayout,但按钮之间有一个空格。 我的错在哪里?

【问题讨论】:

    标签: java swing button layout grid


    【解决方案1】:

    这是因为createButton 实际上是一个JPanel,它默认有一个FlowLayout 作为它的布局管理器。使createButton 成为一个返回JButton 的方法,并且该按钮将跨越单元格内的整个空间。 (您可以删除setPreferredSize())。如果您希望按钮保持 10x10 像素并在框架内居中:将主面板的布局管理器设置为 GridBagLayout 并添加带有 GridLayoutJPanel。也许还覆盖按钮的getPreferredSize() 而不是调用setPreferredSize()


    跨越整个屏幕的按钮:

    class Bild extends JFrame {
    
        public JButton createButton() {
            JButton b = new JButton();
            Border border = new LineBorder(Color.BLACK, 1);
            b.setBorder(border);
            b.setBackground(Color.WHITE);
            return b;
        }
    
        public Bild() {
            setLayout(new GridLayout(10, 10));
            for (int i = 0; i < 100; i++) {
                add(createButton());
            }
        }
    }
    

    按钮剩余 10x10:

    class Bild extends JFrame {
    
        public JButton createButton() {
            JButton b = new JButton() {
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(10, 10);
                }
            };
            Border border = new LineBorder(Color.BLACK, 1);
            b.setBorder(border);
            b.setBackground(Color.WHITE);
            return b;
        }
    
        public Bild() {
            JPanel panel = new JPanel(new GridLayout(10, 10));
            for (int i = 0; i < 100; i++) {
                panel.add(createButton());
            }
            setLayout(new GridBagLayout());
            add(panel);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2013-09-24
      • 2022-01-20
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多