我想知道为什么我的按钮在点击时不反应。要指出的是,一旦我单击该按钮,它应该更改背景色。
当我在一个类中设置Button的属性时,它按预期方式工作,但是当我尝试将Button的属性移至另一个类以使代码更清晰时,它只返回了我一个按钮,而没有更改颜色并且没有按钮的签名
我在哪里出错?
面板:
public class ObrazPanel extends JPanel implements ActionListener {
public static final int HEIGHT = 200;
public static final int WIDTH = 200;
public ObrazPanel() {
FirstButton FirstButtonTlo = new FirstButton();
FirstButtonTlo.FirstButton2();
add(FirstButtonTlo);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
按钮:
public class FirstButton extends JButton implements ActionListener {
public JButton backgroundButton;
public void FirstButton2() {
backgroundButton = new JButton ("guzikTlo");
backgroundButton.addActionListener(this);
setPreferredSize( new Dimension (ObrazPanel.HEIGHT, ObrazPanel.WIDTH));
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == backgroundButton)
setBackground(Color.GREEN);
}
}
答案 0 :(得分:1)
问题是您在面板中添加了按钮FirstButtonTlo
。但是,您将侦听器添加到另一个未显示在GUI上的按钮:backgroundButton
。
而不是在类FirstButton
中创建另一个无用的按钮,而是重写构造函数或添加方法来设置其属性:
public class FirstButton extends JButton implements ActionListener {
public FirstButton () {
super();
this.setText("guzikTlo");
this.addActionListener(this);
this.setPreferredSize( new Dimension (ObrazPanel.HEIGHT, ObrazPanel.WIDTH));
}
// same thing but with a method to initialize the button
// public void myInitMethod() {
// this.setText("guzikTlo");
// this.addActionListener(this);
// this.setPreferredSize( new Dimension (ObrazPanel.HEIGHT, ObrazPanel.WIDTH));
// }
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == this)
JPanel parentContainer = (JPanel) ((JButton)source).getParent();
parentContainer.setBackground(Color.GREEN);
}
}
}
然后您可以将其添加到面板中:
public ObrazPanel() {
FirstButton firstButtonTlo = new FirstButton();
// uncomment if you want to use the method, else do nothing
// firstButtonTlo.myInitMethod();
add(FirstButtonTlo);
}
请注意,您可以使用MouseListener
来代替ActionListener。请尝试使用Java命名约定:变量名不应以大写字母开头。乍一看,我虽然FirstButtonTlo
是一个类而不是变量。在此处阅读更多信息:https://www.oracle.com/technetwork/java/codeconventions-135099.html