package com.cookbook.samples.desktop; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.DefaultListSelectionModel; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.backends.lwjgl.LwjglFiles; import com.badlogic.gdx.backends.lwjgl.LwjglPreferences; import com.badlogic.gdx.files.FileHandle; import com.cookbook.samples.GdxSamples; class SampleList extends JPanel { public interface SampleLauncher { boolean launchSample(String sampleName); } private SampleLauncher testLauncher; public SampleList (SampleLauncher launcher) { testLauncher = launcher; setLayout(new BorderLayout()); final JButton button = new JButton("Run Sample"); final JList list = new JList(GdxSamples.getNames().toArray()); JScrollPane pane = new JScrollPane(list); DefaultListSelectionModel m = new DefaultListSelectionModel(); m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); m.setLeadAnchorNotificationEnabled(false); list.setSelectionModel(m); list.addMouseListener(new MouseAdapter() { public void mouseClicked (MouseEvent event) { if (event.getClickCount() == 2) button.doClick(); } }); list.addKeyListener(new KeyAdapter() { public void keyPressed (KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) button.doClick(); } }); final Preferences prefs = new LwjglPreferences(new FileHandle(new LwjglFiles().getExternalStoragePath() + ".prefs/libgdxCookbookSamples")); list.setSelectedValue(prefs.getString("last", null), true); button.addActionListener(new ActionListener() { @Override public void actionPerformed (ActionEvent e) { String testName = (String)list.getSelectedValue(); prefs.putString("last", testName); prefs.flush(); testLauncher.launchSample((testName)); } }); add(pane, BorderLayout.CENTER); add(button, BorderLayout.SOUTH); } }