Изменить формат на JButton из getSource - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть следующий код:

public class LetterListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand());
        e.getSource();
    }
}

Я хочу иметь возможность установить непрозрачность кнопки после ее нажатия, т.е. вы нажимаете на букву, и она становится непрозрачной.Я не могу думать о том, как это реализовать.В идеале я мог бы использовать e.getSource.setOpaque(true), но это не вариант.Я также новичок в использовании Swing.

Я инициализировал свой JPanel таким образом, поэтому каждая кнопка не сохраняется в переменной.

JPanel letters = new JPanel(new GridLayout(4,3));
for (String letter:letterArr){
    JButton button =new JButton(letter);
    LetterListener letterListener=new LetterListener();
    button.addActionListener(letterListener);
    button.setOpaque(false);
    letters.add(button);

1 Ответ

0 голосов
/ 30 сентября 2018

ActionEvent расширяется от EventObject, для соответствующего API , ActionEvent#getSource() возвращает тип объекта, поэтому вы не можете вызывать метод JButton для переменной этого типа.Чтобы сделать то, что вы хотите, вы должны привести переменную к типу JButton - со всеми обычными предупреждениями / предостережениями / оговорками об опасностях приведения.

Поэтому измените

e.getSource.setOpaque(true);

на:

((JButton) e.getSource).setOpaque(true);

Но, опять же, я не могу не подчеркнуть, что всякий раз, когда вы применяете кастинг, вам следует быть абсолютно уверенным в том, что приведение должно быть правильного типа.

...