// Author: Graham Freeman. July 2008 // Copyright (c) Graham Freeman. g-freeman@adfa.edu.au // The author accepts no responsibility for any problems caused by use of // this software. It is supplied free of charge, and usage is unrestricted, // provided this copyright notice remains intact, regardless of how the // software may be modified by other people. import javax.swing.*; import java.awt.*; import java.awt.event.*; /** This class demonstrates some of the features of SpringLayout and how it handles a JScrollPane which gains or loses scrollbars. */ public class TestSpringLayout extends JFrame implements ActionListener { JButton reject, accept, quit; JTextArea addr; JScrollPane jsp; public static void main( String[] arg ) { new TestSpringLayout().setVisible(true); } public TestSpringLayout() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container cpane = getContentPane(); SpringLayout form = new SpringLayout(); cpane.setLayout(form); JLabel lab1 = new JLabel("Name: ") ; form.putConstraint( form.NORTH, lab1, 3, form.NORTH, cpane ); form.putConstraint( form.WEST, lab1, 4, form.WEST, cpane ); cpane.add(lab1); JLabel lab2 = new JLabel("Address: "); JTextField name = new JTextField(" ",50); form.putConstraint( form.NORTH, name, 3, form.NORTH, cpane ); form.putConstraint( form.WEST, name, 3, form.EAST, lab2 ); cpane.add(name); form.putConstraint( form.NORTH, lab2, 3, form.SOUTH, name ); form.putConstraint( form.WEST, lab2, 4, form.WEST, cpane ); cpane.add(lab2); addr = new JTextArea(" ",3,50 ); jsp = new JScrollPane( addr, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); form.putConstraint( form.NORTH, jsp, 3, form.SOUTH, name ); form.putConstraint( form.WEST, jsp, 0, form.WEST, name ); form.putConstraint( form.EAST, cpane, 4, form.EAST, jsp ); cpane.add(jsp); JLabel lab4 = new JLabel("Adult "); form.putConstraint( form.NORTH, lab4, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, lab4, 0, form.WEST, name ); cpane.add(lab4); JTextField adults = new JTextField(" ",3); form.putConstraint( form.NORTH, adults, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, adults, 3, form.EAST, lab4 ); cpane.add(adults); JLabel Ch = new JLabel("Child"); form.putConstraint( form.NORTH, Ch, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, Ch, 16, form.EAST, adults ); cpane.add(Ch); JTextField children = new JTextField(" ",3); form.putConstraint( form.NORTH, children, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, children, 3, form.EAST, Ch ); cpane.add(children); JLabel Con = new JLabel("Concession"); form.putConstraint( form.NORTH, Con, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, Con, 16, form.EAST, children ); cpane.add(Con); JTextField concess = new JTextField(" ",3); form.putConstraint( form.NORTH, concess, 3, form.SOUTH, jsp ); form.putConstraint( form.WEST, concess, 3, form.EAST, Con ); cpane.add(concess); accept = new JButton("Accept"); form.putConstraint( form.NORTH, accept, 3, form.SOUTH, adults ); form.putConstraint( form.WEST, accept, 16, form.WEST, cpane ); cpane.add(accept); reject = new JButton("Reject"); form.putConstraint( form.NORTH, reject, 3, form.SOUTH, adults ); form.putConstraint( form.HORIZONTAL_CENTER, reject, 0, form.HORIZONTAL_CENTER, cpane ); cpane.add(reject); accept.addActionListener( this ); reject.addActionListener( this ); quit = new JButton("Exit"); form.putConstraint( form.NORTH, quit, 3, form.SOUTH, adults ); form.putConstraint( form.EAST, quit, -16, form.EAST, cpane ); form.putConstraint( form.SOUTH, cpane, 5, form.SOUTH, quit ); cpane.add(quit); quit.addActionListener( this ); pack(); } public void actionPerformed( ActionEvent e ) { Object source = e.getSource(); if (source == reject) { System.out.println("\nReject"); jsp.setVisible(false); pack(); } else if (source == accept) { System.out.println("\nAccept"); addr.setText("First a very long line of text that should force a " +"horizontal scroll bar. We need a fair bit of text; the font" +"is surprisingly narrow.\n"); pack(); } else if (source == quit) { System.out.println("\nQuit"); jsp.setVisible(true); addr.append("and\nthen\nseveral\nlines\nto force\na " +"vertical\nscrollbar\n"); pack(); } } }