public class MyPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
. . .
}
}
public MyPanel()
{
setPreferredSize(new Dimension(width, height));
. . .
}
public class RectanglePanel
{
. . .
private Rectangle box;
}
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
This program displays a frame containing a RectanglePanel.
*/
public class RectangleTest
{
public static void main(String[] args)
{
RectanglePanel rectPanel = new RectanglePanel();
JFrame appFrame = new JFrame();
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
appFrame.setContentPane(rectPanel);
appFrame.pack();
appFrame.show();
}
}
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JPanel;
/**
A rectangle panel displays a rectangle that a user can
move by clicking the mouse.
*/
public class RectanglePanel extends JPanel
{
/**
Constructs a rectangle panel with the rectangle at a
default location.
*/
public RectanglePanel()
{
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
// the rectangle that the paint method draws
box = new Rectangle(BOX_X, BOX_Y,
BOX_WIDTH, BOX_HEIGHT);
// add mouse press listener
class MousePressListener implements MouseListener
{
public void mousePressed(MouseEvent event)
{
int x = event.getX();
int y = event.getY();
box.setLocation(x, y);
repaint();
}
// do-nothing methods
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}
MouseListener listener = new MousePressListener();
addMouseListener(listener);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.draw(box);
}
private Rectangle box;
private static final int BOX_X = 100;
private static final int BOX_Y = 100;
private static final int BOX_WIDTH = 20;
private static final int BOX_HEIGHT = 30;
private static final int PANEL_WIDTH = 300;
private static final int PANEL_HEIGHT = 300;
}
panel.setLayout(new BorderLayout());
panel.add(textField, BorderLayout.SOUTH);
frame.getContentPane().add(textField, BorderLayout.SOUTH);
panel.setLayout(new GridLayout(4, 3));
panel.add(button7);
panel.add(button8);
panel.add(button9);
panel.add(button6);
public class RectangleFrame extends JFrame
{
public RectangleFrame()
{
add components to content pane
}
}
public class RectangleTest
{
public static void main(String[] args)
{
construct and display frame
}
}
class RectanglePanel extends Panel
{
. . .
public void setLocation(int x, int y)
{
box.setLocation(x, y);
repaint();
}
}
import javax.swing.JFrame;
/**
This program tests the RectangleFrame.
*/
public class RectangleTest
{
public static void main(String[] args)
{
JFrame appFrame = new RectangleFrame();
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
appFrame.show();
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
This frame contains a panel that displays a rectangle
and a panel of text fields to specify the rectangle position.
*/
public class RectangleFrame extends JFrame
{
/**
Constructs the frame.
*/
public RectangleFrame()
{
// the panel that draws the rectangle
rectPanel = new RectanglePanel();
// add panel to content Pane
getContentPane().add(rectPanel, BorderLayout.CENTER);
createControlPanel();
pack();
}
/**
Creates the control panel with the text fields
at the bottom of the frame.
*/
private void createControlPanel()
{
// the text fields for entering the x- and y-coordinates
final JTextField xField = new JTextField(5);
final JTextField yField = new JTextField(5);
// the button to move the rectangle
JButton moveButton = new JButton("Move");
class MoveButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
int x = Integer.parseInt(xField.getText());
int y = Integer.parseInt(yField.getText());
rectPanel.setLocation(x, y);
}
}
ActionListener listener = new MoveButtonListener();
moveButton.addActionListener(listener);
// the labels for labeling the text fields
JLabel xLabel = new JLabel("x = ");
JLabel yLabel = new JLabel("y = ");
// the panel for holding the user interface components
JPanel controlPanel = new JPanel();
controlPanel.add(xLabel);
controlPanel.add(xField);
controlPanel.add(yLabel);
controlPanel.add(yField);
controlPanel.add(moveButton);
getContentPane().add(controlPanel, BorderLayout.SOUTH);
}
private RectanglePanel rectPanel;
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JPanel;
/**
This panel displays a rectangle.
*/
public class RectanglePanel extends JPanel
{
/**
Constructs a rectangle panel with the rectangle at a
default location.
*/
public RectanglePanel()
{
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
// the rectangle that the paint method draws
box = new Rectangle(BOX_X, BOX_Y,
BOX_WIDTH, BOX_HEIGHT);
}
/**
Sets the location of the rectangle and repaints the panel.
@param x the x-coordinate of the top left corner of the rectangle
@param y the y-coordinate of the top left corner of the rectangle
*/
public void setLocation(int x, int y)
{
box.setLocation(x, y);
repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.draw(box);
}
private Rectangle box;
private static final int BOX_X = 100;
private static final int BOX_Y = 100;
private static final int BOX_WIDTH = 20;
private static final int BOX_HEIGHT = 30;
private static final int PANEL_WIDTH = 300;
private static final int PANEL_HEIGHT = 300;
}
sButton = new JRadioButton("Small");
mButton = new JRadioButton("Medium");
lButton = new JRadioButton("Large");
ButtonGroup group = new ButtonGroup();
group.add(sbutton);
group.add(mbutton);
group.add(lbutton);panel.add(sButton);
if (sButton.isSelected()) . . .
JCheckBox it = new JCheckBox("Italic");
JComboBox faceName = new JComboBox();
faceName.addItem("Serif");
faceName.addItem("SansSerif");
. . .sel= (String)faceName.getSelectedItem();
import javax.swing.JFrame;
/**
This program tests the ChoiceFrame.
*/
public class ChoiceTest
{
public static void main(String[] args)
{
JFrame frame = new ChoiceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
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.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
/**
This frame contains a text field and a control panel
to change the font of the text.
*/
public class ChoiceFrame extends JFrame
{
/**
Constructs the frame.
*/
public ChoiceFrame()
{
// construct text sample
sampleField = new JLabel("Big Java");
getContentPane().add(sampleField, BorderLayout.CENTER);
// this listener is shared among all components
class ChoiceListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
setSampleFont();
}
}
listener = new ChoiceListener();
createControlPanel();
setSampleFont();
pack();
}
/**
Creates the control panel to change the font.
*/
public void createControlPanel()
{
JPanel facenamePanel = createComboBox();
JPanel sizeGroupPanel = createCheckBoxes();
JPanel styleGroupPanel = createRadioButtons();
// line up component panels
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(3, 1));
controlPanel.add(facenamePanel);
controlPanel.add(sizeGroupPanel);
controlPanel.add(styleGroupPanel);
// add panels to content pane
getContentPane().add(controlPanel, BorderLayout.SOUTH);
}
/**
Creates the combo box with the font style choices.
@return the panel containing the combo box
*/
public JPanel createComboBox()
{
facenameCombo = new JComboBox();
facenameCombo.addItem("Serif");
facenameCombo.addItem("SansSerif");
facenameCombo.addItem("Monospaced");
facenameCombo.setEditable(true);
facenameCombo.addActionListener(listener);
JPanel panel = new JPanel();
panel.add(facenameCombo);
return panel;
}
/**
Creates the check boxes for selecting bold and italic style
@return the panel containing the check boxes
*/
public JPanel createCheckBoxes()
{
italicCheckBox = new JCheckBox("Italic");
italicCheckBox.addActionListener(listener);
boldCheckBox = new JCheckBox("Bold");
boldCheckBox.addActionListener(listener);
JPanel panel = new JPanel();
panel.add(italicCheckBox);
panel.add(boldCheckBox);
panel.setBorder
(new TitledBorder(new EtchedBorder(), "Style"));
return panel;
}
/**
Creates the radio buttons to select the font size
@return the panel containing the radio buttons
*/
public JPanel createRadioButtons()
{
smallButton = new JRadioButton("Small");
smallButton.addActionListener(listener);
mediumButton = new JRadioButton("Medium");
mediumButton.addActionListener(listener);
largeButton = new JRadioButton("Large");
largeButton.addActionListener(listener);
largeButton.setSelected(true);
// add radio buttons to button group
ButtonGroup group = new ButtonGroup();
group.add(smallButton);
group.add(mediumButton);
group.add(largeButton);
JPanel panel = new JPanel();
panel.add(smallButton);
panel.add(mediumButton);
panel.add(largeButton);
panel.setBorder
(new TitledBorder(new EtchedBorder(), "Size"));
return panel;
}
/**
Gets user choice for font name, style, and size
and sets the font of the text sample.
*/
public void setSampleFont()
{ // get font name
String facename
= (String)facenameCombo.getSelectedItem();
// get font style
int style = 0;
if (italicCheckBox.isSelected())
style = style + Font.ITALIC;
if (boldCheckBox.isSelected())
style = style + Font.BOLD;
// get font size
int size = 0;
final int SMALL_SIZE = 24;
final int MEDIUM_SIZE = 36;
final int LARGE_SIZE = 48;
if (smallButton.isSelected())
size = SMALL_SIZE;
else if (mediumButton.isSelected())
size = MEDIUM_SIZE;
else if (largeButton.isSelected())
size = LARGE_SIZE;
// set font of text field
sampleField.setFont(new Font(facename, style, size));
sampleField.repaint();
}
private JLabel sampleField;
private JCheckBox italicCheckBox;
private JCheckBox boldCheckBox;
private JRadioButton smallButton;
private JRadioButton mediumButton;
private JRadioButton largeButton;
private JComboBox facenameCombo;
private ActionListener listener;
}
JMenuBar bar = new JMenuBar(); frame.setJMenuBar(bar);
JMenu fileMenu = new JMenu("File");
bar.add(fileMenu);
JMenuItem fileNew = new JMenuItem("New");
ActionListener l = ...;
fileNew.addActionListener(l);
import javax.swing.JFrame;
/**
This program tests the MenuFrame.
*/
public class MenuTest
{
public static void main(String[] args)
{
JFrame frame = new MenuFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
/**
This frame has a menu with commands to set the position of
a rectangle.
*/
public class MenuFrame extends JFrame
{
/**
Constructs the frame.
*/
public MenuFrame()
{
generator = new Random();
// add drawing panel to content pane
panel = new RectanglePanel();
getContentPane().add(panel, BorderLayout.CENTER);
// construct menu
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(createFileMenu());
menuBar.add(createEditMenu());
pack();
}
/**
Creates the File menu.
@return the menu
*/
public JMenu createFileMenu()
{
JMenu menu = new JMenu("File");
menu.add(createFileNewItem());
menu.add(createFileExitItem());
return menu;
}
/**
Creates the Edit menu.
@return the menu
*/
public JMenu createEditMenu()
{
JMenu menu = new JMenu("Edit");
menu.add(createMoveMenu());
menu.add(createEditRandomizeItem());
return menu;
}
/**
Creates the Move submenu.
@return the menu
*/
public JMenu createMoveMenu()
{
JMenu menu = new JMenu("Move");
menu.add(createMoveItem("Up", 0, -1));
menu.add(createMoveItem("Down", 0, 1));
menu.add(createMoveItem("Left", -1, 0));
menu.add(createMoveItem("Right", 1, 0));
return menu;
}
/**
Creates the File->New menu item and sets its action listener.
@return the menu item
*/
public JMenuItem createFileNewItem()
{
JMenuItem item = new JMenuItem("New");
class MenuItemListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
panel.reset();
}
}
ActionListener listener = new MenuItemListener();
item.addActionListener(listener);
return item;
}
/**
Creates the File->Exit menu item and sets its action listener.
@return the menu item
*/
public JMenuItem createFileExitItem()
{
JMenuItem item = new JMenuItem("Exit");
class MenuItemListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
}
ActionListener listener = new MenuItemListener();
item.addActionListener(listener);
return item;
}
/**
Creates a menu item to move the rectangle and sets its
action listener.
@param label the menu label
@param dx the amount by which to move the rectangle in x-direction
@param dy the amount by which to move the rectangle in y-direction
@return the menu item
*/
public JMenuItem createMoveItem(String label,
final int dx, final int dy)
{
JMenuItem item = new JMenuItem(label);
class MenuItemListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
panel.moveRectangle(dx, dy);
}
}
ActionListener listener = new MenuItemListener();
item.addActionListener(listener);
return item;
}
/**
Creates the Edit->Randomize menu item and sets its action listener.
@return the menu item
*/
public JMenuItem createEditRandomizeItem()
{
JMenuItem item = new JMenuItem("Randomize");
class MenuItemListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
int width = panel.getWidth();
int height = panel.getHeight();
int dx = -1 + generator.nextInt(3);
int dy = -1 + generator.nextInt(3);
panel.moveRectangle(dx, dy);
}
}
ActionListener listener = new MenuItemListener();
item.addActionListener(listener);
return item;
}
private RectanglePanel panel;
private Random generator;
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JPanel;
/**
A panel that shows a rectangle.
*/
class RectanglePanel extends JPanel
{
/**
Constructs a panel with the rectangle in the top left
corner.
*/
public RectanglePanel()
{
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
// the rectangle that the paint method draws
box = new Rectangle(0, 0, BOX_WIDTH, BOX_HEIGHT);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.draw(box);
}
/**
Resets the rectangle to the top left corner.
*/
public void reset()
{
box.setLocation(0, 0);
repaint();
}
/**
Moves the rectangle and repaints it. The rectangle
is moved by multiples of its full width or height.
@param dx the number of width units
@param dy the number of height units
*/
public void moveRectangle(int dx, int dy)
{
box.translate(dx * BOX_WIDTH, dy * BOX_HEIGHT);
repaint();
}
private Rectangle box;
private static final int BOX_WIDTH = 20;
private static final int BOX_HEIGHT = 30;
private static final int PANEL_WIDTH = 300;
private static final int PANEL_HEIGHT = 300;
}