我正在为学校项目制作一个基本计算器,我需要满足的要求之一是更改 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) ;
}
}
我玩弄了你的代码。本质上,我删除了各种硬编码的尺寸,并将布局管理器切换到 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();
}