package org.freehep.swing.test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
/**
* Abstract frame to be extended by test classes
*/
public abstract class TestFrame extends JFrame
{
private JMenuBar menuBar;
private JPanel topPanel;
protected TestFrame()
{
setTitle(createTitle());
// create panel, add menubar and component
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
menuBar = createMenuBar();
if (menuBar != null) {
topPanel.add(menuBar, BorderLayout.NORTH);
addToMenuBar(menuBar);
}
topPanel.add(createComponent(), BorderLayout.CENTER);
getContentPane().add(topPanel);
// add Look and Feel menu
menuBar.add(createLookAndFeelMenu());
// Make this exit when the close button is clicked.
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
quit();
}
});
pack();
setVisible(true);
}
protected JMenu createLookAndFeelMenu() {
JMenu look = new JMenu("Look and Feel");
ButtonGroup group = new ButtonGroup();
final javax.swing.UIManager.LookAndFeelInfo info[] = UIManager.getInstalledLookAndFeels();
for (int i=0; i< info.length; i++) {
JRadioButtonMenuItem radio = new JRadioButtonMenuItem(info[i].getName());
radio.setActionCommand(info[i].getClassName());
radio.setSelected(info[i].getName().equals(UIManager.getLookAndFeel().getName()));
look.add(radio);
group.add(radio);
radio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
UIManager.setLookAndFeel(e.getActionCommand());
SwingUtilities.updateComponentTreeUI(topPanel);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
return look;
}
protected JMenuBar createMenuBar() {
return new JMenuBar();
}
protected void addToMenuBar(JMenuBar menuBar) {
}
protected abstract JComponent createComponent();
protected String createTitle()
{
return "Test Frame";
}
/**
* This method brings up a dialog box to ask if the user really
* wants to quit. If the answer is yes, the application is
* stopped. */
public void quit()
{
// Create a dialog box to ask if the user really wants to quit.
int n = JOptionPane.showConfirmDialog
(this, "Do you really want to quit?","Confirm Quit",
JOptionPane.YES_NO_OPTION);
if (n==JOptionPane.YES_OPTION) System.exit(0);
}
}