我正在研究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...
答案 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)
来做同样的事情。那你就不必继承。