引用hashMap值

时间:2013-05-06 23:27:39

标签: swing reference hashmap

我正在研究Swing代码,它有一堆与其十六进制值的hashmap相关联的单选按钮。然后它将显示(在显示区域中)颜色(在背景中)以及该颜色的十六进制值的一些文本。

我希望它通过引用我的hashMap中存储的值并相应地填充这些字段来完成此操作,但不知道该怎么做。我可以对各个ActionListeners进行硬编码(总共20个),但如果你必须采取一切艰难的行动,编码的重点是什么?

以下是我的ActionListener&我的hashMap中有几个条目。提前谢谢!

        //----  Action Listener
    jrbRed.addActionListener(new ActionListener()   {//<---Reference whichever button is selected instead of just 'jrbRed'
        @Override
        public void actionPerformed(ActionEvent e)  {
            jlblMessage.setForeground(Color.decode("#000000"));
            jlblMessage.setText("FF0000");//<---Reference hashmap value
            getContentPane().setBackground(Color.red);//<---Reference hashmap value
        }
    });

    // ...my color map of hex values for referencing...
    hashMap.put("Blue", "#0000FF");
    hashMap.put("Purplish", "#DF01D7");
    hashMap.put("Red", "#FF0000");
            //  ...etc...

2 个答案:

答案 0 :(得分:0)

如果你的地图看起来像这样怎么办?

JButton blueButton = new JButton("Blue");
hashMap.put(blueButton, "#0000FF");

MyActionListener listener = new MyActionListener();

for(JButton button : hashMap.keySet()) {
    button.addActionListener(listener);
}

然后根据听众中的按钮获取值:

jbliMessage.setText(hashMap.get((JButton)e.getSource());

答案 1 :(得分:0)

您可以将单选按钮子类化为前景,背景和文本Color变量,并在ActionListener中引用它们:

private class ColorSettingListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        ColorRadioButton crb = (ColorRadioButton) e.getSource();
        jlblMessage.setForeground(crb.getForegroundColor());
        jlblMessage.setText(crb.getColortext());
        getContentPanel().setBackground(crb.getBackgroundColor());
    }
}

如果您认为这太过突兀,可以使用JComponent.getClientProperty(Object)JComponent.setClientProperty(Object, Object)来做同样的事情。那你就不必继承。