簡體   English   中英

Java GUI Swing,GridLayout中的按鈕之間沒有空格

[英]Java GUI Swing, buttons in GridLayout without space between buttons

我想創建一個按鈕網格。 在按鈕之間不應有空格,以便按鈕可以觸摸下一個按鈕。

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,但是按鈕之間還是有一個空格。 我的錯誤在哪里?

這是因為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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM