我正在制作GUI,我必须制作按钮和背景更改。该程序使用的是Java Collection Framework,我选择了Hashmap。我真的很难理解,尝试做的是访问一个txt文件然后读取对并将它们存储在hashmap中。 txt文件包含对颜色 - 单独行上的十六进制值,它们将按十六进制值的递增顺序对对进行排序,并使用迭代器将已排序的对显示到控制台。我尝试了一个BufferReader,但遇到了错误,但我猜这不是用于地图的最佳方式。
//输入File.txt
红色FF0000
蓝色000084
绿色00FF00
黄色FFFF00
橙色FF8C00
Pink FFC0CB
灰色D3D3D3
布朗964B00
紫色800080
黑色000000
深绿色013220
深红色8B0000
深蓝色00008B
深橙色D97700
深灰色363737
深紫色471E8A
深黄色7f7f00
淡黄色FFFFCC
浅蓝色C0D9D9
浅紫D8BFD8
以下是我已经开始并最终为GUI工作的代码。
public class FP extends JFrame implements ActionListener {
BufferedReader reader = new BufferedReader(new FileReader(new File("Input File.txt")));
private Map<String, String> buttonColors;
// Constructor
public FP() {
super("ColorMap");
buttonColors = new HashMap<String, String>();
//test button
buttonColors.put("Red", "FF0000");
setSize(400, 400);
setLayout(new FlowLayout());
ButtonGroup buttonGroup = new ButtonGroup();
for (Map.Entry<String, String> coloringButtons : buttonColors
.entrySet()) {
JRadioButton button = new JRadioButton(coloringButtons.getKey());
button.setActionCommand(coloringButtons.getValue());
button.addActionListener(this);
// Add this new color-button to the button group
buttonGroup.add(button);
add(button);
}
}
@Override
public void actionPerformed(ActionEvent e) {
String color = e.getActionCommand();
getContentPane().setBackground(new Color(Integer.parseInt(color, 16)));
}
public static void main(String[] args) {
FP obj = new FP();
obj.setVisible(true);
}
}
答案 0 :(得分:0)
这里是你的代码被修改为读取文件并填充HashMap,在这种情况下我使用TreeMap按顺序对十六进制字段进行排序,看看这是否适合你,
public class FP extends JFrame实现了ActionListener {
private TreeMap<String, String> buttonColors;
// Constructor
public FP() {
super("ColorMap");
buttonColors = new TreeMap<String, String>();
BufferedReader br = new BufferedReader(new FileReader("InputFile.txt");
while(true)
{
String str = br.readLine();
if(str==null)break;
if(str.length()==0)continue;
string[] st = str.split(" ");
string colorName = st[0].trim();
string colorValue = st[1].trim();
//* to have the colors sorted by the hex value
buttonColors.put(colorValue, colorName);
}
br.close();
//test button
//buttonColors.put("Red", "FF0000");
setSize(400, 400);
setLayout(new FlowLayout());
ButtonGroup buttonGroup = new ButtonGroup();
for (Map.Entry<String, String> coloringButtons : buttonColors
.entrySet()) {
JRadioButton button = new JRadioButton(coloringButtons.getValue());
button.setActionCommand(coloringButtons.getKey());
button.addActionListener(this);
// Add this new color-button to the button group
buttonGroup.add(button);
add(button);
}
}