ボタンの列があり、表示されているものと表示されていないものがあります。そこで、これらのボタンを、表示されているボタンから順にパネルに追加された順に並べ替えます。
そこで、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));
}
}
どちらかといえば何が欠けていますか?
更新しました
私は自分のせいを理解しました。TreeMapにHashMapからのデータを入力する必要がありました。ジョンBが示したのと同じ方法。
panelSortedButtons.putAll(panelButtons);