我需要创建更多按钮。如何让听众知道b1已被按下,并将背景更改为三文鱼的hashmap值。这样,当我创建更多按钮时,它将知道按下了哪个按钮,并将背景更改为与该按钮相关联的颜色。我不知道该怎么做。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
public class Collection extends JFrame {
JPanel panel1 = new JPanel();
public Collection(){
Listen react = new Listen();
Map<String, String> hashmap = new HashMap<String, String>();
setLayout(new BorderLayout());
hashmap.put("Salmon","#FA8072" );
JRadioButton b1 = new JRadioButton(hashmap.get("Salmon"));
b1.addActionListener(react);
panel1.add(b1);
add(panel1, BorderLayout.CENTER);
}
class Listen implements ActionListener{
public void actionPerformed(ActionEvent e){
panel1.setBackground();}}
public static void main(String[] args){
Collection c = new Collection();
c.setSize(300,300);
c.setLocationRelativeTo(null);
c.setTitle("colors");
c.setDefaultCloseOperation(c.EXIT_ON_CLOSE);
c.setVisible(true);
}}
答案 0 :(得分:2)
在方法public void actionPerformed(ActionEvent e)
中,您可以使用e.getSource()
来确定事件的来源。您可以使用b1.setName
设置按钮的名称,然后执行((JRadioButton)e.getSource()).getName()
之类的操作来检索它并确定按下了哪个按钮。或者,您可以将b1.putClientProperty("id", someObject)
用于相同目的。
答案 1 :(得分:0)
尝试将颜色信息添加到Listen类:创建一个构造函数,该构造函数接受一个Color或String,用于保存每个Listen实例的颜色信息。然后,在调用panel1.setBackground()的地方,使用存储的颜色信息指定那里的颜色。
也许是这样的:
class Listen implements ActionListener {
Color myColor;
public Listen (Color newColor) {
myColor = newColor;
}
public void actionPerformed (ActionEvent e) {
panel1.setBackground(myColor);
}
}
然后在你的Collection类中,
Listen react = new Listen();
成为
Listen react = new Listen(hashmap.get("Salmon"));
因此,当您单击按钮时,面板变黑。我想你必须重新设计你的HashMap系统,我认为这很棒,但它必须将字符串映射到颜色。您可以使用Color构造函数来获取可以指定特定颜色的红色,蓝色和绿色值。例如,你的三文鱼颜色将是FA = 250,80 = 128,72 = 114,所以hashmap.put(“Salmon”,new Color(250,128,114));
如果您有任何疑问,请与我们联系!
答案 2 :(得分:0)
观察观察者模式。您可以将观察者附加到对象上,该对象将根据其观察的内容更改其附加的内容。这个想法是你可以像你一样附加尽可能多的观察者,并相应地改变附件的状态。这适用于动作侦听器和按钮侦听器。