/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.swing; import lombok.NonNull; import javax.swing.*; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class SelectionKeeper implements ListSelectionListener, ListDataListener { private final JList list; private Object lastSelected; private SelectionKeeper(@NonNull JList list) { this.list = list; } public void intervalAdded(ListDataEvent e) { list.setSelectedValue(lastSelected, true); } public void intervalRemoved(ListDataEvent e) { list.setSelectedValue(lastSelected, true); } public void contentsChanged(ListDataEvent e) { list.setSelectedValue(lastSelected, true); } public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { lastSelected = list.getSelectedValue(); } } public static void attach(@NonNull JList list) { SelectionKeeper s = new SelectionKeeper(list); list.addListSelectionListener(s); list.getModel().addListDataListener(s); } }