package edu.umd.cs.piccolo.examples;
import edu.umd.cs.piccolox.pswing.PSwing;
import edu.umd.cs.piccolox.pswing.PSwingCanvas;
import edu.umd.cs.piccolox.swing.PScrollPane;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Tests a set of Sliders and Checkboxes in panels.
*
* @author Martin Clifford
*/
public class SliderExample extends JFrame {
private PSwingCanvas canvas;
private PScrollPane scrollPane;
private JTabbedPane tabbedPane;
private PSwing swing;
public SliderExample() {
// Create main panel
JPanel mainPanel = new JPanel( false );
// Create a tabbed pane
tabbedPane = new JTabbedPane();
tabbedPane.setPreferredSize( new Dimension( 700, 700 ) );
// Add tabbed pane to main panel
mainPanel.add( tabbedPane );
// Set the frame contents
getContentPane().add( mainPanel );
// Create a canvas
canvas = new PSwingCanvas();
canvas.setPreferredSize( new Dimension( 700, 700 ) );
// Create a scroll pane for the canvas
scrollPane = new PScrollPane( canvas );
// Create a new tab for the tabbed pane
tabbedPane.add( "Tab 1", scrollPane );
// Create the contents for "Tab 1"
JPanel tabPanel = new JPanel( false );
tabPanel.setLayout( null );
tabPanel.setPreferredSize( new Dimension( 700, 700 ) );
// Populate the tab panel with four instances of nested panel.
JPanel panel;
panel = createNestedPanel();
panel.setSize( new Dimension( 250, 250 ) );
panel.setLocation( 0, 0 );
tabPanel.add( panel );
panel = createNestedPanel();
panel.setSize( new Dimension( 250, 250 ) );
panel.setLocation( 0, 350 );
tabPanel.add( panel );
panel = createNestedPanel();
panel.setSize( new Dimension( 250, 250 ) );
panel.setLocation( 350, 0 );
tabPanel.add( panel );
panel = createNestedPanel();
panel.setSize( new Dimension( 250, 250 ) );
panel.setLocation( 350, 350 );
tabPanel.add( panel );
// Add the default zoom button
JButton buttonPreset = new JButton( "Zoom = 100%" );
buttonPreset.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
canvas.getCamera().setViewScale( 1.0 );
canvas.getCamera().setViewOffset( 0, 0 );
}
} );
buttonPreset.setSize( new Dimension( 120, 25 ) );
buttonPreset.setLocation( 240, 285 );
tabPanel.add( buttonPreset );
// Create a pswing object for the tab panel
swing = new PSwing( tabPanel );
swing.translate( 0, 0 );
// Add the pswing object to the canvas
canvas.getLayer().addChild( swing );
// Turn off default pan event handling
canvas.setPanEventHandler( null );
// Set up basic frame
setDefaultCloseOperation( javax.swing.WindowConstants.DISPOSE_ON_CLOSE );
setTitle( "Slider Example" );
setResizable( true );
setBackground( null );
pack();
setVisible( true );
}
private JPanel createNestedPanel() {
// A panel MUST be created with double buffering off
JPanel panel;
JLabel label;
panel = new JPanel( false );
panel.setLayout( new BorderLayout() );
label = new JLabel( "A Panel within a panel" );
label.setHorizontalAlignment( SwingConstants.CENTER );
label.setForeground( Color.white );
JLabel label2 = new JLabel( "A Panel within a panel" );
label2.setHorizontalAlignment( SwingConstants.CENTER );
JSlider slider = new JSlider();
JCheckBox cbox1 = new JCheckBox( "Checkbox 1" );
JCheckBox cbox2 = new JCheckBox( "Checkbox 2" );
JPanel panel3 = new JPanel( false );
panel3.setLayout( new BoxLayout( panel3, BoxLayout.PAGE_AXIS ) );
panel3.setBorder( new EmptyBorder( 3, 3, 3, 3 ) );
panel3.add( label2 );
panel3.add( slider );
panel3.add( cbox1 );
panel3.add( cbox2 );
JPanel panel2 = new JPanel( false );
panel2.setBackground( Color.blue );
panel.setBorder( new EmptyBorder( 1, 1, 1, 1 ) );
panel2.add( label );
panel2.add( panel3 );
panel.setBackground( Color.red );
panel.setSize( new Dimension( 250, 250 ) );
panel.setBorder( new EmptyBorder( 5, 5, 5, 5 ) );
panel.add( panel2, "Center" );
panel.revalidate();
return panel;
}
public static void main( String[] args ) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
new SliderExample();
}
} );
}
}