单击时删除具有相同文本的按钮

时间:2019-02-25 08:26:37

标签: java

我得到了这份作业,单击该按钮时需要删除带有相同文本的按钮。 例如,如果我上面有3个带有单词“ Word”的按钮,然后单击其中之一,它将从框架本身中删除所有按钮。 我很可能无法在变量上获取正确的值来获取其文本,从而为何不能删除它们

我的代码:

private String NamesArr[]= {"Yakir","Yarden","Igor","Maoz","Moshe","Israel","Tal","Haim","Nati","Mor","Daniel","Idan"};
private Button ButtonArr[]=new Button[NamesArr.length];
private Font font;

public StudentsGUI(String caption) {
    super(caption);
    this.setLayout(new GridLayout(3,3));
    font=new Font("Ariel",Font.BOLD,35);

    for(int i=0;i<NamesArr.length;i++) {
        ButtonArr[i]=new Button(" "+NamesArr[(int)(Math.random()*NamesArr.length)]);
        ButtonArr[i].setFont(font);
        ButtonArr[i].addActionListener(this);
        this.add(ButtonArr[i]);
    }
    setLocation(800,500);
    setVisible(true);
    pack();
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==ButtonArr) {
            String btnText=ButtonArr.toString();
        for(int i=0;i<NamesArr.length;i++) {
            if(ButtonArr[i].getLabel().equals(btnText))
                    this.remove(ButtonArr[i]);
            }


    }



}

}

1 个答案:

答案 0 :(得分:0)

注释中提到的actionPerformed代码存在一些缺陷。首先,要检查源类型,您不能将两个对象(在这种情况下为两个不同类型)与==比较。其次,从实际对象中检索按钮文本。像这样:

public void actionPerformed(ActionEvent e) {
    if (e.getSource() instanceof Button) {
        String btnText = ((Button)e.getSource()).getLabel();
        for(int i=0; i<ButtonArr.length; i++) {
            if (ButtonArr[i].getLabel().equals(btnText)) {
                this.remove(ButtonArr[i]);
            }
        }
    }
}

最后,为了不使类型与对象混淆,Java中常见的编码原理是以小写字母开头的变量名。