我有以下代码:
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);
答案 0 :(得分:1)
ActionEvent从EventObject扩展而来,每个the relevant API,ActionEvent#getSource()
返回Object类型,因此您不能对该类型的变量进行JButton方法调用。要执行您想要的操作,必须将变量转换为JButton类型-带有有关转换危险的所有常规警告/警告/附带条件。
所以改变
e.getSource.setOpaque(true);
收件人:
((JButton) e.getSource).setOpaque(true);
但是我再强调不过,无论何时投射,最好绝对确保投射类型正确。