Java tutorial
/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.jglfw.tests; import java.awt.BorderLayout; import java.awt.HeadlessException; 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.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import com.badlogic.gdx.LifecycleListener; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.backends.jglfw.JglfwApplication; import com.badlogic.gdx.backends.jglfw.JglfwApplicationConfiguration; import com.badlogic.gdx.backends.jglfw.JglfwFiles; import com.badlogic.gdx.backends.jglfw.JglfwPreferences; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.tests.utils.GdxTest; import com.badlogic.gdx.tests.utils.GdxTests; import com.badlogic.gdx.utils.GdxRuntimeException; public class JglfwTestStarter extends JFrame { public JglfwTestStarter() throws HeadlessException { super("JGLFW libgdx Tests"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setContentPane(new TestList()); pack(); setSize(getWidth(), 600); setLocationRelativeTo(null); setVisible(true); } /** Runs the {@link GdxTest} with the given name. * @param testName the name of a test class * @return {@code true} if the test was found and run, {@code false} otherwise */ public static JglfwApplication runTest(String testName) { final GdxTest test = GdxTests.newTest(testName); if (test == null) throw new GdxRuntimeException("Test not found: " + testName); final JglfwApplicationConfiguration config = new JglfwApplicationConfiguration(); config.width = 640; config.height = 480; config.title = testName; config.forceExit = false; return new JglfwApplication(test, config); } class TestList extends JPanel { public TestList() { setLayout(new BorderLayout()); final JButton button = new JButton("Run Test"); final JList list = new JList(GdxTests.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 JglfwPreferences( new FileHandle(new JglfwFiles().getExternalStoragePath() + ".prefs/jglfw-tests")); 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(); JglfwTestStarter.this.setVisible(false); runTest(testName).addLifecycleListener(new LifecycleListener() { public void resume() { } public void pause() { } public void dispose() { JglfwTestStarter.this.setVisible(true); } }); } }); add(pane, BorderLayout.CENTER); add(button, BorderLayout.SOUTH); } } /** Runs a libgdx test. * * If no arguments are provided on the command line, shows a list of tests to choose from. If an argument is present, the test * with that name will immediately be run. * * @param argv command line arguments */ public static void main(String[] argv) throws Exception { if (argv.length > 0) { runTest(argv[0]); return; } UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new JglfwTestStarter(); } }