java swing 如何设置按钮大小_如何在Java Swing中设置相同的按钮大小?

你的问题是XY问题,你问,“我怎么做X”当更好的解决方案不是做“X”,而是做“Y”时。

在这里,您将询问如何设置按钮的首选大小,以便使按钮大小相等,而事实上,更好且规范正确的解决方案不是这样做,而是使用更好的布局管理器,一个为您调整按钮大小的管理器——GridLayout。

例如,创建一个新的JPanel来保存按钮,比如buttonPanel,给它一个GridLayout,比如

new GridLayout(1, 0, 3, 0)

,然后向其中添加按钮,然后将此JPanel添加到主JPanel。

例如。,

m6Qzw.jpg

import java.awt.GridLayout;

import javax.swing.*;

@SuppressWarnings("serial")

public class LayoutEg extends JPanel {

private static final int KILO_FIELD_COLS = 15;

private static final int GAP = 3;

private JTextField kiloTextField = new JTextField(KILO_FIELD_COLS);

private JButton calcButton = new JButton("Calculate");

private JButton alertButton = new JButton("Alert");

public LayoutEg() {

// add ActionListeners etc....

JPanel enterPanel = new JPanel();

enterPanel.add(new JLabel("Enter a distance in kilometers:"));

enterPanel.add(kiloTextField);

JPanel buttonPanel = new JPanel(new GridLayout(1, 0, GAP, 0));

buttonPanel.add(calcButton);

buttonPanel.add(alertButton);

setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));

setLayout(new GridLayout(0, 1));

add(enterPanel);

add(buttonPanel);

}

private static void createAndShowGui() {

LayoutEg mainPanel = new LayoutEg();

JFrame frame = new JFrame("Kilometer Converter");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().add(mainPanel);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(() -> createAndShowGui());

}

}

代码说明:

kiloTextField中列数的常量

private static final int KILO_FIELD_COLS = 15;

J按钮之间的间隙和主J面板周围的间隙(空边框)的常数

private static final int GAP = 3;

15列宽的JTextField

private JTextField kiloTextField = new JTextField(KILO_FIELD_COLS);

持有JLabel和JTextField的顶部JPanel。默认情况下,它使用FlowLayout:

JPanel enterPanel = new JPanel();

enterPanel.add(new JLabel("Enter a distance in kilometers:"));

enterPanel.add(kiloTextField);

这里是问题的关键,创建一个JPanel,它使用

GridLayout(1, 0, 3, 0)

,这是一个具有1行的网格布局

变量

具有3水平间距且没有垂直间距的列数(0秒参数)。然后添加我们的按钮:

JPanel buttonPanel = new JPanel(new GridLayout(1, 0, GAP, 0));

buttonPanel.add(calcButton);

buttonPanel.add(alertButton);

在主JPanel周围放置一个3像素宽的边框

setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));

为主JPanel提供一个具有可变行数(0)和1列的GridLayout,并将enterPanel和buttonPanel添加到其中:

setLayout(new GridLayout(0, 1));

add(enterPanel);

add(buttonPanel);

在评论中有更多的解释,特别是

钥匙

方法,

.pack()

:

// create the main JPanel

LayoutEg mainPanel = new LayoutEg();

// create a JFrame to put it in, although better to put into a JDialog

JFrame frame = new JFrame("Kilometer Converter");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// add the LayoutEg JPanel into the JFrame

frame.getContentPane().add(mainPanel);

// **** key method*** that tells the layout managers to work

frame.pack();

// center and display

frame.setLocationRelativeTo(null);

frame.setVisible(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值