调整 JButton 的大小

Resizing a JButton

我想知道如何在我的代码中调整 'alarmClockButton' 的大小,我试过 setSize();和 setPreferredSize();但是它们都不起作用。为此,我正在使用 GridBagLayout。有什么想法吗?

 public class MainMenu {

    // JFrame = the actual menu / frame.
    private JFrame frame;
    // JLabel = provides text instructions or information on a GUI —
    // display a single line of read-only text, an image or both text and an image.
    private JLabel background, logo;
    // JButton = button.
    private JButton alarmClockButton;

    // Constructor to create menu
    public MainMenu() {
        frame = new JFrame("Alarm Clock");
        alarmClockButton = new JButton("Timer");
        alarmClockButton.setPreferredSize(new Dimension(1000, 1000));
        // Add an event to clicking the button.
        alarmClockButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO: CHANGE TO SOMETHING NICER
                JOptionPane.showMessageDialog(null, "This feature hasn't been implemented yet.", "We're sorry!",
                        JOptionPane.ERROR_MESSAGE);
            }
        });
        // Creating the background
        try {
            background = new JLabel(new ImageIcon(ImageIO.read(getClass()
                    .getResourceAsStream("/me/devy/alarm/clock/resources/background.jpg"))));
            logo = new JLabel(new ImageIcon(ImageIO.read(getClass()
            .getResourceAsStream("/me/devy/alarm/clock/resources/logo.png"))));
        } catch (IOException e) {
            e.printStackTrace();
        }
        background.setLayout(new GridBagLayout());
        frame.setContentPane(background);
        GridBagConstraints gbc = new GridBagConstraints();
        // Inset = spacing between each component
        gbc.insets = new Insets(15,15, 15, 15);
        // Positioning
        gbc.gridx = 0;
        gbc.gridy = 0;
        frame.add(logo, gbc);
        // Positioning
        // Keep x the same = aligned. On same x-coordinate (think math!)
        gbc.gridx = 0;
        // Y = 2 down
        gbc.gridy = 1;
        frame.add(alarmClockButton, gbc);
        frame.setVisible(true);
        frame.setSize(550, 200);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        alarmClockButton.setForeground(Color.RED);
    }

}

谢谢!

您可以通过GridBagConstraints来影响按钮的大小,例如...

使用 ipadxipady,它们添加到组件 preferredSize

gbc.ipadx = 100;
gbc.ipady = 100;

生成类似于...

您还可以使用...

gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;

这会改变组件将占据的 space 数量以及组件在给定单元格中的填充方式...

注:

因为您使用 JLabel 作为背景组件,您将被限制为标签的首选大小,该大小仅通过 icontext 属性计算, 它不会使用布局管理器来计算这些结果。