|
Advanced GUI Layout
With Examples in Java |
|
Prof. David Bernstein |
| Computer Science Department |
| bernstdh@jmu.edu |
Using the (Almost) Composite Pattern
import java.awt.*;
import javax.swing.*;
/**
* An example that uses hierarchical layout
*
* @version 1.0
* @author CS349, James Madison Univeristy
*/
public class HierarchicalLayoutDriver
{
/**
* The entry point of the example
*
* @param args The command line arguments
*/
public static void main(String[] args)
{
Container contentPane;
JButton cancelButton, noButton, yesButton;
JFrame frame;
JLabel titleLabel;
JPanel southPanel;
JTextArea textArea;
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
titleLabel = new JLabel();
titleLabel.setText("An Example of Hierarchical Layout");
contentPane.add(titleLabel, BorderLayout.NORTH);
textArea = new JTextArea(40,20);
contentPane.add(textArea, BorderLayout.CENTER);
southPanel = new JPanel();
southPanel.setLayout(new FlowLayout());
yesButton = new JButton("Yes");
southPanel.add(yesButton);
noButton = new JButton("No");
southPanel.add(noButton);
cancelButton = new JButton("Cancel");
southPanel.add(cancelButton);
contentPane.add(southPanel, BorderLayout.SOUTH);
// Make the JFrame as small as necessary
frame.pack();
frame.setSize(400,400);
frame.setVisible(true);
}
}
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* An "About" box
*
* This class illustrates the use of constrained template
* layout (i.e., GridBagLayout)
*
* @author Prof. David Bernstein, James Madison University
* @version 1.0
*/
public class AboutDialog extends JDialog
implements ActionListener
{
/**
* Constructor
*/
public AboutDialog(Frame owner, String name, String description)
{
super(owner, "About "+name+"...", true);
Container contentPane;
GridBagConstraints gbc;
GridBagLayout gbl;
JButton button;
JLabel label;
JTextArea text;
setSize(350,200);
contentPane = getContentPane();
gbl = new GridBagLayout();
contentPane.setLayout(gbl);
label = new JLabel(name, JLabel.CENTER);
label.setFont(new Font("Sans Serif", Font.BOLD, 16));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 3;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.CENTER;
gbc.weightx = 100;
gbc.weighty = 0;
gbl.setConstraints(label, gbc);
contentPane.add(label);
label = new JLabel(" JMU ");
label.setFont(new Font("Sans Serif", Font.PLAIN, 40));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 3;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbl.setConstraints(label, gbc);
contentPane.add(label);
text = new JTextArea(20,20);
text.append(description);
text.setEditable(false);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 3;
gbc.gridheight = 3;
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 100;
gbc.weighty = 100;
gbl.setConstraints(text, gbc);
contentPane.add(text);
label = new JLabel("Copyright, James Madison University");
label.setFont(new Font("Sans Serif", Font.PLAIN, 10));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridwidth = 3;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(label, gbc);
contentPane.add(label);
button = new JButton("OK");
button.addActionListener(this);
gbc = new GridBagConstraints();
gbc.gridx = 3;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(button, gbc);
contentPane.add(button);
}
/**
* Handle actionPerformed events (required by ActionListener)
*
* @param evt The event
*/
public void actionPerformed(ActionEvent evt)
{
String command;
command = evt.getActionCommand();
if (command.equals("OK")) setVisible(false);
}
}
import java.awt.*;
import javax.swing.*;
/**
* An example that uses a scrollable text area
*
* @version 1.0
* @author Prof. David Bernstein, James Madison Univeristy
*/
public class ScrollableDriver
{
/**
* The entry point of the example
*
* @param args The command line arguments
*/
public static void main(String[] args)
{
Container contentPane;
JFrame frame;
JLabel titleLabel;
JPanel southPanel;
JRadioButton automobilesCB, planesCB, trainsCB;
JScrollPane scrollPane;
JTextArea messageArea;
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
titleLabel = new JLabel();
titleLabel.setText("A Scrolling Example");
contentPane.add(titleLabel, BorderLayout.NORTH);
messageArea = new JTextArea(1,1);
// This is new
scrollPane = new JScrollPane(messageArea);
contentPane.add(scrollPane, BorderLayout.CENTER);
southPanel = new JPanel();
southPanel.setLayout(new FlowLayout());
planesCB = new JRadioButton("Planes");
southPanel.add(planesCB);
trainsCB = new JRadioButton("Trains");
southPanel.add(trainsCB);
automobilesCB = new JRadioButton("Automobiles");
southPanel.add(automobilesCB);
contentPane.add(southPanel, BorderLayout.SOUTH);
frame.setSize(400,400);
frame.setVisible(true);
}
}
Some Views
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* An example that uses buttons and a
* docking tool bar.
*
* @version 1.0
* @author Prof. David Bernstein, James Madison Univeristy
*/
public class DockDriver
{
/**
* The entry point of the example
*
* @param args The command line arguments
*/
public static void main(String[] args)
{
Container contentPane;
JButton cancelButton, okButton;
JFrame frame;
JLabel titleLabel;
JTextArea messageArea;
JToolBar toolBar;
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
titleLabel = new JLabel();
titleLabel.setText("A Button Example");
contentPane.add(titleLabel, BorderLayout.NORTH);
messageArea = new JTextArea(40,20);
contentPane.add(messageArea, BorderLayout.CENTER);
// This is new
toolBar = new JToolBar();
okButton = new JButton("OK");
// This is new
toolBar.add(okButton);
cancelButton = new JButton("Cancel");
// This is new
toolBar.add(cancelButton);
// This is new
contentPane.add(toolBar, BorderLayout.SOUTH);
frame.setSize(400,400);
frame.setVisible(true);
}
}
import java.awt.*;
import javax.swing.*;
/**
* An example that uses Border
*
* @author Prof. David Bernstein, James Madison University
* @version 1.0
*/
public class BorderDriver
{
public static void main(String[] args)
{
JFrame frame;
Container contentPane;
JPanel p1, p2;
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,200);
contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(3,1));
p1 = new JPanel();
p1.setLayout(new BorderLayout());
p1.setBorder(BorderFactory.createTitledBorder("Name"));
p1.add(new JTextField(" "), BorderLayout.CENTER);
contentPane.add(p1);
p2 = new JPanel();
p2.setLayout(new BorderLayout());
p2.setBorder(BorderFactory.createTitledBorder("Address"));
p2.add(new JTextField(" "), BorderLayout.CENTER);
contentPane.add(p2);
contentPane.add(new JLabel("We will sell your personal information!"));
frame.pack();
frame.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
/**
* An example that uses a JTabbedPane
*
* @version 1.0
* @author Prof. David Bernstein, James Madison Univeristy
*/
public class JTabbedPaneDriver
{
/**
* The entry point of the example
*
* @param args The command line arguments
*/
public static void main(String[] args)
{
Container contentPane;
JFrame frame;
JPanel complements, criticisms;
JTabbedPane tabbedPane;
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
tabbedPane = new JTabbedPane();
contentPane.add(tabbedPane, BorderLayout.CENTER);
complements = new JPanel();
complements.setLayout(new BorderLayout());
complements.add(new JLabel("Things you like about this class:"),
BorderLayout.NORTH);
complements.add(new JTextArea(), BorderLayout.CENTER);
criticisms = new JPanel();
criticisms.setLayout(new BorderLayout());
criticisms.add(new JLabel("Things you dislike about this class:"),
BorderLayout.NORTH);
tabbedPane.addTab("Complements", complements);
tabbedPane.addTab("Criticisms", criticisms);
frame.setSize(400,200);
frame.setVisible(true);
}
}