我有一排按钮,有些是可见的,有些不可见。所以我想对这些按钮进行排序,以便将它们添加到以可见按钮开头的面板中。
所以我创建了 LinkedHashMap ,如果按钮可见,则添加 true ,否则添加 false 。然后我创建了我的比较器,按值(布尔值)对这个地图进行排序,只有在它之后,我才将按钮添加到 TreeMap 的面板中。但是 TreeMap 最后是空的。
这是我所做的:
private Map<Widget, Boolean> panelButtons = new HashMap<Widget, Boolean>();
private Map<Widget, Boolean> panelSortedButtons = new TreeMap<Widget, Boolean>(comparator);
private ButtonsComparator comparator = new ButtonsComparator(panelButtons);
//UI initialization: buttons are added using addToPanel() method - described below
for(Widget widget : panelSortedButtons.keySet()) { //panelSortedButtons is empty
panel.add(widget);
}
//----------------
//All buttons are added via this method
public void addToPanel(Widget widget, boolean isVisible) {
panelButtons.put(widget, isVisible);
}
//----------------
private class ButtonsComparator implements Comparator<Widget>{
Map<Widget, Boolean> buttons;
public ButtonsComparator(Map<Widget, Boolean> buttons) {
this.buttons = buttons;
}
@Override
public int compare(Widget widget1, Widget widget2) {
return buttons.get(widget1).compareTo(buttons.get(widget2));
}
}
如果有什么遗漏?
更新
我明白我的错,我必须用来自 HashMap 的数据填充我的 TreeMap。与 John B. 所展示的方式相同。
panelSortedButtons.putAll(panelButtons);