java - 如何设置按钮的大小?

标签 java user-interface swing button size

我将按钮放在带有 GridLayout 的 JPane 中。然后我用 BoxLayout.Y_AXIS 将 JPanel 放入另一个 JPanel。我希望 GridLayout 中的按钮是方形的。我使用 tmp.setSize(30,30) 但它不起作用。我也尝试使用 new GridLayout(X, Y, 4, 4) 但我无法弄清楚 X 和 Y 是什么。那么,做这些事情的正确方法是什么?

添加:

我仍然无法解决问题。这是我正在尝试做的代码:

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

public class PanelModel {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Colored Trails");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel firstPanel = new JPanel();
        firstPanel.setLayout(new GridLayout(4, 4));
        JButton btn;
        for (int i=1; i<=4; i++) {
            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(100, 100));
                firstPanel.add(btn);
            }
        }

        JPanel secondPanel = new JPanel();
        secondPanel.setLayout(new GridLayout(5, 13));
        for (int i=1; i<=5; i++) {
            for (int j=1; j<=13; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(40, 40));
                secondPanel.add(btn);
            }
        }

        mainPanel.add(firstPanel);
        mainPanel.add(secondPanel);
        frame.add(mainPanel);

        frame.setSize(400,600);
        frame.setVisible(true);
    }
}

问题在于 Java 试图使 firstPanelsecondPanel 的宽度相等!此外,Java 试图填满窗口的所​​有高度。我怎样才能消除这种行为?

最佳答案

以下代码可以满足您的要求。只需确保分配足够的空间,以便按钮上的文本可见

JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(4,4,4,4));

for(int i=0 ; i<16 ; i++){
    JButton btn = new JButton(String.valueOf(i));
    btn.setPreferredSize(new Dimension(40, 40));
    panel.add(btn);
}
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);

X 和 Y(GridLayout 构造函数的两个第一个参数)指定网格中的行数和列数(分别)。如果您希望该值不受限制,可以将其中一个保留为 0。

编辑

我已经修改了提供的代码,我相信它现在符合预期:

JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

JPanel firstPanel = new JPanel();
firstPanel.setLayout(new GridLayout(4, 4));
firstPanel.setMaximumSize(new Dimension(400, 400));
JButton btn;
for (int i=1; i<=4; i++) {
    for (int j=1; j<=4; j++) {
        btn = new JButton();
        btn.setPreferredSize(new Dimension(100, 100));
        firstPanel.add(btn);
    }
}

JPanel secondPanel = new JPanel();
secondPanel.setLayout(new GridLayout(5, 13));
secondPanel.setMaximumSize(new Dimension(520, 200));
for (int i=1; i<=5; i++) {
    for (int j=1; j<=13; j++) {
        btn = new JButton();
        btn.setPreferredSize(new Dimension(40, 40));
        secondPanel.add(btn);
    }
}

mainPanel.add(firstPanel);
mainPanel.add(secondPanel);
frame.setContentPane(mainPanel);

frame.setSize(520,600);
frame.setMinimumSize(new Dimension(520,600));
frame.setVisible(true);

基本上我现在设置面板的首选尺寸和框架的最小尺寸。

关于java - 如何设置按钮的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2536873/

相关文章:

java - 使用 Java 8 获取属性的最大值

qt - 如何将带有图像和透明背景的按钮添加到 QVideoWidget?

c# - Windows 窗体、带有 Groupbox 选项卡顺序之谜的嵌套 TabControl(带插图)

java - 如何将下一行值更新为jtable中第一行的相同值?

java - 在 Swing 中平均调整两个 ScrollPanes 的大小

java - 使用库(并行)在 R for Windows 上对 RWeka 进行并行化

java - Android 的 AudioRecord 类以什么顺序存储音频样本?

java - 替代 SplitPane 来分割 "content",加上 TitlePane 折叠/展开问题;我应该用什么代替?

python - 如何使用get()函数将entry()框中的答案转换为字符串

java - 在 Jtable 中显示来自其他 JTable 的行选择的数据