Как получить источник из объекта кнопки, созданной из другого класса? - PullRequest
0 голосов
/ 20 апреля 2019

Я делаю игру памяти, используя Java Swing. до сих пор я создал класс, который возвращает пользовательские кнопки JButton с уже имеющимся изображением (без слипов). в основном классе я создаю объекты этого класса и добавляю их на панель. все работает, но когда я добавляю слушателей действия, метод getSource возвращает JButton, и в результате я не могу использовать методы внутри класса пользовательских кнопок. Как я могу использовать getSource и создать кнопку из класса пользовательских кнопок?

Я попытался привести кнопку, возвращенную из метода getSource, к кнопкам (класс пользовательских кнопок), но это не сработало.

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, он не позволит мне использовать метод getId класса Buttons.

1 Ответ

0 голосов
/ 20 апреля 2019

Почему вы хотите, чтобы ваш экземпляр Buttons имел отдельную кнопку в качестве атрибута?Вы уже являетесь кнопкой.Это кажется плохим выбором дизайна.

Тем не менее, поскольку вы устанавливаете имя кнопки в качестве индекса создания, вы можете просто использовать source.getName() и преобразовать его обратно в int, а затем использовать это int какИндекс для массива JB.

...