Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调整JButton的大小_Java_Swing_Jbutton_Gridbaglayout_Dimensions - Fatal编程技术网

Java 调整JButton的大小

Java 调整JButton的大小,java,swing,jbutton,gridbaglayout,dimensions,Java,Swing,Jbutton,Gridbaglayout,Dimensions,我想知道如何在代码中调整“alarmClockButton”的大小,我尝试了setSize();和setPreferredSize();然而,它们都不起作用。我正在使用GridBagLayout进行此操作。有什么想法吗 public class MainMenu { // JFrame = the actual menu / frame. private JFrame frame; // JLabel = provides text instructions or i

我想知道如何在代码中调整“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
影响按钮的大小,例如

使用
ipadx
ipady
,将其添加到组件
preferredSize

gbc.ipadx = 100;
gbc.ipady = 100;
产生类似于

你也可以使用

gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
这会改变组件将占用的空间量以及组件在给定单元格中的填充方式

注意:


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

什么是“不起作用”呢?你到底想达到什么目的?你到底得到了什么?更贴切的描述会有很大帮助。调整按钮大小最好使用不同大小的字体或不同长度的文本,通过更改图标大小或边距来完成。太好了!这起作用了。最后一个问题(不确定是否应该将其放在不同的线程中),但当我打开程序时,按钮位于GUI的中心,如何使其向左?我尝试将gridx设置为负值,但这给了我一个ArraySoutOfCountException。您可以使用
GridBagConstraints
anchor
属性,但在这种情况下我不会使用
fill
属性