从getSource更改JButton的格式

时间:2018-09-30 13:26:52

标签: java swing jpanel jbutton

我有以下代码:

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 :(得分:1)

ActionEvent从EventObject扩展而来,每个the relevant APIActionEvent#getSource()返回Object类型,因此您不能对该类型的变量进行JButton方法调用。要执行您想要的操作,必须将变量转换为JButton类型-带有有关转换危险的所有常规警告/警告/附带条件。

所以改变

e.getSource.setOpaque(true);

收件人:

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

但是我再强调不过,无论何时投射,最好绝对确保投射类型正确。