gpt4 book ai didi

java - 扩展类(其父类扩展了 JFrame)后出现 StackOverflowError

转载 作者:行者123 更新时间:2023-12-01 18:10:39 25 4
gpt4 key购买 nike

我正在制作一个计算器,目前有两个类。第一个是扩展 JFrame 并创建计算器框架的主类,第二个类是为 JFrame 创建按钮布局。我希望能够将 ButtonPanel 类中的文本设置到包含文本区域的主类,但是当我让 ButtonPanel 类扩展主类时,扩展 JFrame 它会导致这些错误。

Exception in thread "main" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
at java.awt.Window.init(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Frame.<init>(Unknown Source)
at javax.swing.JFrame.<init>(Unknown Source)

我的代码

public class Calculator extends JFrame {
public Calculator() {
super("Calculator");
setSize(300,200);
setResizable(false);
setLocationRelativeTo(null);

textBox = new JTextField();
getContentPane().add(textBox,BorderLayout.NORTH);

getContentPane().add(new ButtonPanel(), BorderLayout.CENTER);
setVisible(true);

}
protected JTextField textBox;
public void setString(String str) {
textBox.setText(str);
}

public static void main(String[] args) {
Calculator ge = new Calculator();
}
}

class ButtonPanel extends Calculator {

ButtonPanel() {
JPanel pan = new JPanel();
GridBagLayout gbl = new GridBagLayout();
pan.setLayout(gbl);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;

gbc.gridx = gbc.gridy = 0;
gbc.gridheight = gbc.gridwidth = 1;
JButton button = new JButton("7");
pan.add(button,gbc);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int num = 7;
performAct(num);
}
});

gbc.gridx = 1;
button = new JButton("8");
pan.add(button, gbc);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int num = 8;
performAct(num);
}
});

//Other Buttons not included
void performAct(int buttonNum) {
switch (buttonNum) {
case 0: setString("0");
case 1: setString("1");
case 2: setString("2");
case 3: setString("3");
case 4: setString("4");
case 5: setString("5");
case 6: setString("6");
case 7: setString("7");
case 8: setString("8");
case 9: setString("9");
case 10: setString(" + ");
case 11: setString( " - ");
case 12: setString(" * ");
case 13: setString( " / ");
case 14: setString(" % ");
}
}
}

最佳答案

 class ButtonPanel extends Calculator 

ButtonPanel 不应扩展计算器。 ButtonPanel 不是 JFrame。

ButtonPanel 可以扩展 JPanel,因为您想向其中添加组件。

JPanel pan = new JPanel();

那么就不需要创建JPanel了。您只需设置类的布局并直接添加组件即可。

查看 Swing 教程中关于 How to Use GridBagLayout 的部分有关如何构建类的更好示例。

关于java - 扩展类(其父类扩展了 JFrame)后出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com