Java 使用setVisible方法控制可见性时出错
当通过按钮控制某些组件的可见性时,我得到了stackoverflow错误 我正在使用Java 使用setVisible方法控制可见性时出错,java,awt,Java,Awt,当通过按钮控制某些组件的可见性时,我得到了stackoverflow错误 我正在使用actionperformed()方法单击按钮,为某些组件设置setVisible(true) 第25行和第55行出现堆栈溢出错误 import java.awt.event.*; public class Expanse extends Frame { Label l1, l2; Button b1, b2, b3; Frame f1; TextField tf1, tf2;
actionperformed()
方法单击按钮,为某些组件设置setVisible(true)
第25行和第55行出现堆栈溢出错误
import java.awt.event.*;
public class Expanse extends Frame {
Label l1, l2;
Button b1, b2, b3;
Frame f1;
TextField tf1, tf2;
Expanse() {
l1 = new Label("welcome user");
Font font1 = new Font("SansSerif", Font.BOLD, 25);
Font font2 = new Font("SansSerif", Font.BOLD, 18);
l1.setFont(font1);
addWindowListener(new myWindowAdapter());
l1.setBounds(100, 25, 300, 50);
add(l1);
l2 = new Label("please click any button from below");
l2.setBounds(75, 100, 500, 50);
l2.setFont(font2);
add(l2);
b1 = new Button("add data");
b1.setBounds(70, 175, 100, 50);
add(b1);
b1.addActionListener(new addListener());
b2 = new Button("retrive data");
b2.setBounds(275, 175, 100, 50);
add(b2);
setLayout(null);
setSize(500, 500);
setVisible(true);
tf1 = new TextField("enter amount");
tf2 = new TextField("enter reason");
tf1.setBounds(70, 260, 150, 30);
add(tf1);
tf2.setBounds(70, 320, 150, 30);
add(tf2);
b3 = new Button("write");
b3.setBounds(100, 380, 80, 35);
add(b3);
tf1.setVisible(false);
tf2.setVisible(false);
b3.setVisible(false);
}
public static void main(String a[]) {
Expanse e1 = new Expanse();
}
}
class myWindowAdapter extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
class addListener extends Expanse implements ActionListener {
public void actionPerformed(ActionEvent ae) {
tf1.setVisible(true);
tf2.setVisible(true);
b3.setVisible(true);
}
}
在
Expanse
构造函数中,您有:
b1.addActionListener(新的addListener())代码>
它构造了一个addListener
对象。1
addListener
扩展了Expanse
,因此您正在使用Expanse
构造函数创建另一个Expanse
对象
这是一个无休止的过程,会导致堆栈溢出
解决方法很简单:addListener
没有理由扩展Expanse
class addListener implements ActionListener {...}
我假设添加extensedexpanse
是为了访问tf1
和其他类变量,但这不是实现这一点的方法
或者简单地使用addListener
类,即Expanse
中的内部类
class addListener implements ActionListener {...}
1旁注:请参见您拥有的Expanse
构造函数中的:
b1.addActionListener(新的addListener())代码>
它构造了一个addListener
对象。1
addListener
扩展了Expanse
,因此您正在使用Expanse
构造函数创建另一个Expanse
对象
这是一个无休止的过程,会导致堆栈溢出
解决方法很简单:addListener
没有理由扩展Expanse
class addListener implements ActionListener {...}
我假设添加extensedexpanse
是为了访问tf1
和其他类变量,但这不是实现这一点的方法
或者简单地使用addListener
类,即Expanse
中的内部类
class addListener implements ActionListener {...}
1侧注:见我看不到。您的侦听器扩展了Expanse
,在Expanse
构造函数中实例化时递归调用Expanse
构造函数。可能。1)为什么要使用AWT?有关放弃AWT组件而支持Swing的许多好理由,请参阅。2) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与…的布局填充和边框一起使用。。。。3) “控制可见性”对相关组件使用a,如中所示。在这种情况下,卡将是a)组件。b) 一块空白的面板,我看不到。您的侦听器扩展了Expanse
,在Expanse
构造函数中实例化时递归调用Expanse
构造函数。可能。1)为什么要使用AWT?有关放弃AWT组件而支持Swing的许多好理由,请参阅。2) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与…的布局填充和边框一起使用。。。。3) “控制可见性”对相关组件使用a,如中所示。在这种情况下,卡将是a)组件。b) 空白面板。