繁体   English   中英

如何让听众注意按下哪个按钮

[英]how do i make the listener notice which button is pressed

我需要创建更多按钮。 如何让听众知道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);
}}

在方法public void actionPerformed(ActionEvent e)您可以使用e.getSource()来确定事件的来源。 您可以使用b1.setName设置按钮的名称,然后执行类似((JRadioButton)e.getSource()).getName()来检索它并确定按下了哪个按钮。 或者,您可以使用b1.putClientProperty("id", someObject)来实现相同的目的。

尝试将颜色信息添加到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));

如果您有任何疑问,请告诉我们!

查看观察者模式。 您可以将观察者附加到对象上,该对象将根据观察的内容更改其附加的对象。 您可以根据需要添加尽可能多的观察者,并相应地更改附件的状态。 这适用于动作侦听器和按钮侦听器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM