package moviescraper.doctord.view;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
public abstract class FavoriteItemPickerPanel extends JPanel{
private static final long serialVersionUID = 1L;
//list
private JList<String> favoritesList;
protected DefaultListModel<String> favoritesListModel;
//buttons
private JButton addButton;
private JButton removeButton;
//input
private JTextField newItemTextField;
public FavoriteItemPickerPanel() {
super(new BorderLayout());
//set up the input
newItemTextField = new JTextField(15);
//set up the list
String[] listValues = getSettingValues();
favoritesListModel = new DefaultListModel<>();
favoritesList = new JList<>(favoritesListModel);
for(String listValue : listValues)
{
favoritesListModel.addElement(listValue);
}
favoritesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane favoritesListScrollPane = new JScrollPane(favoritesList);
//set up the buttons
addButton = new JButton("Add");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = favoritesList.getSelectedIndex(); //get selected index
if (index == -1) { //no selection, so insert at beginning
index = 0;
} else { //add after the selected item
index++;
}
favoritesListModel.insertElementAt(newItemTextField.getText(), index);
//If we just wanted to add to the end, we'd do this:
//listModel.addElement(employeeName.getText());
//Reset the text field.
newItemTextField.requestFocusInWindow();
newItemTextField.setText("");
//Select the new item and make it visible.
favoritesList.setSelectedIndex(index);
favoritesList.ensureIndexIsVisible(index);
determineRemoveButtonEnabled();
}
});
removeButton = new JButton("Remove");
determineRemoveButtonEnabled();
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = favoritesList.getSelectedIndex();
favoritesListModel.remove(index);
int size = favoritesListModel.getSize();
if (size == 0) { //Nobody's left, disable firing.
removeButton.setEnabled(false);
} else { //Select an index.
if (index == favoritesListModel.getSize()) {
//removed item in last position
index--;
}
favoritesList.setSelectedIndex(index);
favoritesList.ensureIndexIsVisible(index);
}
determineRemoveButtonEnabled();
}
});
//add all components
add(favoritesListScrollPane, BorderLayout.CENTER);
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane,
BoxLayout.LINE_AXIS));
buttonPane.add(addButton);
buttonPane.add(newItemTextField);
buttonPane.add(removeButton);
add(buttonPane, BorderLayout.PAGE_END);
}
private void determineRemoveButtonEnabled()
{
if(favoritesListModel.size() > 0)
removeButton.setEnabled(true);
else
removeButton.setEnabled(false);
}
public abstract String[] getSettingValues();
public abstract void storeSettingValues();
}