为什么我的 JButton 大小没有通过 setSize() 或 setPreferredSize() 改变?

问题描述 投票:0回答:1

我正在为学校项目制作一个基本计算器,我需要满足的要求之一是更改 JPanel 内 JButton 的大小。我已经尝试过这样做,但它没有改变。

我尝试过使用

setSize()
setPreferredSize()
来更改它,但这两种方法都不起作用。我还尝试设置其大小,而不将其添加到 JPanel(在代码中进行了解释),只是将其添加到框架中,但这也不起作用。

对于在线帮助,我在 Stack Overflow 上查看了 this 问题,我(在某种程度上)复制了它的代码,但它不起作用。

有人可以告诉我我做错了什么吗?

代码

进口

import java.awt.GridLayout ;
import java.awt.Dimension ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
import javax.swing.JFrame ;
import javax.swing.JPanel ;
import javax.swing.JButton ;
import javax.swing.BoxLayout ;

班级

public class Main {
    public JFrame frame = new JFrame("Calculator") ;
    public JButton one = new JButton("1") ;
    public JPanel mainPanel = new JPanel() ;
    public JPanel buttonsPanel = new JPanel() ;
    public static void main(String[] args) {
        Main main = new Main() ;

        main.one.setPreferredSize(new Dimension(500, 500)) ;

        main.one.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Take that fat L") ;
            }
        }) ;


        main.buttonsPanel.setLayout(new GridLayout(5, 3)) ;
        main.buttonsPanel.setMaximumSize(new Dimension(2500, 1500)) ;
        main.buttonsPanel.add(main.one) ;
        main.mainPanel.setLayout(new BoxLayout(main.mainPanel, BoxLayout.Y_AXIS)) ;
        main.mainPanel.add(main.buttonsPanel) ;

        main.frame.setContentPane(main.mainPanel) ;
        main.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
        main.frame.setSize(500, 700) ;
        main.frame.setLocationRelativeTo(null) ;
        main.frame.setVisible(true) ;
    }
}
java swing jbutton grid-layout boxlayout
1个回答
0
投票

我玩弄了你的代码。本质上,我删除了各种硬编码的尺寸,并将布局管理器切换到 GridBagLayout。另外我最后添加了 JFrame.pack() 。

这样我就得到了一个具有默认尺寸的框架,在调整大小时我可以看到按钮从最小尺寸增长到首选尺寸。这“突然”发生。如果你想要平稳增长,你必须告诉 GridBagLayouts 如何做到这一点 - 为此使用 GridBagConstraints。

这是我最终得到的结果:

public static void main(String[] args) {
    Main main = new Main() ;

    main.one.setPreferredSize(new Dimension(400, 400)) ;
    main.one.setMinimumSize(new Dimension(100, 100)) ;
    main.one.setMaximumSize(new Dimension(800, 800)) ;

    main.one.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Take that fat L") ;
        }
    }) ;


    main.buttonsPanel.setLayout(new GridBagLayout()) ;
    //main.buttonsPanel.setMaximumSize(new Dimension(2500, 1500)) ;
    main.buttonsPanel.add(main.one) ;
    main.mainPanel.setLayout(new GridBagLayout()) ;
    main.mainPanel.add(main.buttonsPanel) ;

    main.frame.setContentPane(main.mainPanel) ;
    main.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
    //main.frame.setSize(500, 700) ;
    main.frame.setLocationRelativeTo(null) ;
    main.frame.setVisible(true) ;
    main.frame.pack();
}
© www.soinside.com 2019 - 2024. All rights reserved.