Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 使用setVisible方法控制可见性时出错_Java_Awt - Fatal编程技术网

Java 使用setVisible方法控制可见性时出错

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;

当通过按钮控制某些组件的可见性时,我得到了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;

    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) 空白面板。