我得到了这份作业,单击该按钮时需要删除带有相同文本的按钮。 例如,如果我上面有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]);
}
}
}
}
答案 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中常见的编码原理是以小写字母开头的变量名。