0

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

我希望它通过引用存储在我的 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...
4

2 回答 2

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());
于 2013-05-06T23:37:51.740 回答
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)andJComponent.setClientProperty(Object, Object)来做同样的事情。然后你不必子类化。

于 2013-05-06T23:40:10.417 回答