Newer
Older
sklauncher / src / main / java / com / skcraft / launcher / swing / SelectionKeeper.java
@sk89q sk89q on 9 Jan 2014 1 KB Initial commit.
/*
 * 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);
    }

}