我正在使用Java swing制作记忆游戏。到目前为止,我已经制作了一个返回自定义JButton的类,其中已有图像(未翻转)。在主类中,我正在创建该类的对象并将其添加到面板中。一切正常,但是当我添加动作侦听器时,getSource方法返回一个JButton,结果我无法使用自定义按钮类内部的方法。如何使用getSource并从自定义按钮类创建按钮?
我尝试将getSource方法返回的按钮强制转换为Buttons(自定义按钮类),但是没有用。
public class Buttons extends JButton{
int id;
JButton butt;
private static int x=0;
public Buttons() throws IOException{
butt=this.retButton();
}
public JButton retButton() throws IOException{
BufferedImage img =
ImageIO.read(getClass().getResourceAsStream("/folder/flipped.png"));
ImageIcon image = new ImageIcon(img);
JButton button = new JButton();
button.setName(Integer.toString(x));
button.setIcon(image);
button.setBackground(Color.white);
x+=1;
return button;
}
public JButton getButton(){
return this.butt;
}
public int getId() {
return id;
}
}
我正在使用的主要班级:
for (int i=0; i<12; i++){
jb[i] = new Buttons();
jb[i].getButton().addActionListener(this);
jb[i].setId(cardNums.get(i));
panel.add(jb[i].getButton());
}
frame.add(panel, BorderLayout.CENTER);
frame.pack();
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JButton) {
JButton btn = (JButton)source;
System.out.println("hey");}
动作侦听器可以工作,但是由于btn是一个JButton,它不会让我使用Buttons类的getId方法。
答案 0 :(得分:0)
为什么要让Buttons实例具有一个单独的按钮作为属性?您已经是一个按钮。这似乎是一个糟糕的设计选择。
也就是说,由于将按钮名称设置为创建索引,因此可以只使用source.getName()
并将其转换回int,然后将该int用作jb数组的索引。