Some basic JFrame applications:
An empty frame
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent; /** * Write a description of class RectangleObject here. */ public class RectangleObject extends JComponent { public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Construct a rectangle object Rectangle box = new Rectangle(5, 10, 20, 30); // draw the rectangle g2.draw(box); } }
The JFrame class:
import javax.swing.JFrame; /** * Draw an empty frame using JFrame. * */ public class RectangleJFrame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(300,400); frame.setTitle("A Rectanlge Object in a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); RectangleObject aRectangle = new RectangleObject(); frame.add(aRectangle); frame.setVisible(true); } }
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent; import java.awt.BasicStroke; import java.awt.Color; /** * Write a description of class RectangleObject here. */ public class RectangleObject extends JComponent { public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Construct a rectangle object Rectangle box = new Rectangle(5, 10, 20, 30); // draw the rectangle g2.setColor(Color.red); g2.setStroke(new BasicStroke(5)); g2.draw(box); } }
import javax.swing.JFrame; /** * Draw an empty frame using JFrame. * */ public class RectangleJFrame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(300,400); frame.setTitle("A Rectanlge Object in a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); RectangleObject aRectangle = new RectangleObject(); frame.add(aRectangle); frame.setVisible(true); } }
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.Rectangle; import javax.swing.JComponent; /** * Write a description of class EllipseObject here. */ public class EllipseObject extends JComponent { public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; Rectangle box = new Rectangle(100, 100, 200, 200); // draw the rectangle g2.draw(box); // Construct an Ellipse object //Ellipse2D.Double circle = new Ellipse2D.Double(upperLeftXBox,upperLeftYBox , width, height); Ellipse2D.Double circle = new Ellipse2D.Double(100, 100, 200, 200); // draw the ellipse g2.draw(circle); } }
import javax.swing.JFrame; /** * Draw an empty frame using JFrame. * */ public class EllipseJFrame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400,400); frame.setTitle("An Ellipse Object in a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); EllipseObject anEllipse = new EllipseObject(); frame.add(anEllipse); frame.setVisible(true); } }
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import javax.swing.JComponent; /* A component that draws an alien face */ public class LotsOfColors extends JComponent { public void paintComponent(Graphics g) { // Recover Graphics2D Graphics2D g2 = (Graphics2D) g; // Draw the an ellipse Ellipse2D.Double ellipse = new Ellipse2D.Double(150, 100, 100, 150); g2.setColor(Color.YELLOW); g2.draw(ellipse); // Draw solid green rectangle g2.setColor(Color.GREEN); Rectangle box = new Rectangle(0, 0, 50, 50); g2.fill(box); box.translate(300, 300); g2.fill(box); // Draw the mouth Line2D.Double line = new Line2D.Double(50, 50, 300, 300); g2.setColor(Color.RED); g2.draw(line); // Draw the greeting g2.setColor(Color.BLUE); g2.drawString("Some colorful shapes", 100, 100); } }
import javax.swing.JFrame; /** * Draw an empty frame using JFrame. * */ public class LotsOfColorsJFrame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400,400); frame.setTitle("Shapes with lots of colors in a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); LotsOfColors colorfullObjects = new LotsOfColors(); frame.add(colorfullObjects); frame.setVisible(true); } }
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import javax.swing.JComponent; /** This component displays a circle that can be moved. */ public class ShapeComponent extends JComponent { private static final int SQUARE_X = 100; private static final int SQUARE_Y = 100; private static final int SQUARE_WIDTH = 50; private static final int SQUARE_HEIGHT = 50; private Ellipse2D.Double circle; public ShapeComponent() { // The rectangle that the paintComponent method draws circle = new Ellipse2D.Double(SQUARE_X, SQUARE_Y, SQUARE_WIDTH, SQUARE_HEIGHT); } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.draw(circle); } /** Moves the rectangle to the given location. @param x the x-position of the new location @param y the y-position of the new location */ public void moveTo(int x, int y) { circle = new Ellipse2D.Double(x, y, SQUARE_WIDTH, SQUARE_HEIGHT); repaint(); } }
import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import javax.swing.JFrame; import java.awt.Color; /** This program displays a ShapeComponent. */ public class ShapeComponentViewer { private static final int FRAME_WIDTH = 300; private static final int FRAME_HEIGHT = 400; public static void main(String[] args) { final ShapeComponent component = new ShapeComponent(); // Add mouse press listener class MousePressListener implements MouseListener { public void mousePressed(MouseEvent event) { int x = event.getX(); int y = event.getY(); component.moveTo(x, y); } // 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(); component.addMouseListener(listener); JFrame frame = new JFrame(); frame.getContentPane().setBackground(new Color(255, 0, 0)); frame.add(component); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
input and output with a GUI
import javax.swing.JOptionPane; /** * input and output with a GUI. */ public class InputPanel { public static void main(String[] args) { String input = JOptionPane.showInputDialog("Enter a number:"); int num = Integer.parseInt(input); JOptionPane.showMessageDialog(null, "The number you entered is " + num); } }
Implementing the ActionLister with a Button
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** An action listener that prints a message. */ public class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println("You clicked me!!!!"); } }
import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; /** This program demonstrates how to install an action listener. */ public class ButtonViewer { private static final int FRAME_WIDTH = 100; private static final int FRAME_HEIGHT = 60; public static void main(String[] args) { JFrame frame = new JFrame(); JButton button = new JButton("Click here if you dare!"); frame.add(button); ActionListener listener = new ButtonListener(); button.addActionListener(listener); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
Using an Inner Class:
import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** This program demonstrates how to install an action listener. */ public class ButtonViewer { private static final int FRAME_WIDTH = 100; private static final int FRAME_HEIGHT = 60; public static void main(String[] args) { /************ Inner Class Define Before is used ***************************/ /** An action listener that prints a message. */ class ClickListener implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println("I was clicked."); } } /************ Inner Class End ***************************/ JFrame frame = new JFrame(); JButton button = new JButton("Click me!"); frame.add(button); ActionListener listener = new ClickListener(); button.addActionListener(listener); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
Motion effect
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent; /** This component displays a rectangle that can be moved. */ public class RectangleMovingComponent extends JComponent { 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 Rectangle box; public RectangleMovingComponent() { // The rectangle that the paintComponent method draws box = new Rectangle(BOX_X, BOX_Y, BOX_WIDTH, BOX_HEIGHT); } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.draw(box); } /** Moves the rectangle by a given amount. @param x the amount to move in the x-direction @param y the amount to move in the y-direction */ public void moveBy(int dx, int dy) { box.translate(dx, dy); repaint(); } }
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.Timer; /** This program moves the rectangle. */ public class RectangleMover { private static final int FRAME_WIDTH = 300; private static final int FRAME_HEIGHT = 400; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setTitle("An animated rectangle"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final RectangleMovingComponent component = new RectangleMovingComponent(); frame.add(component); frame.setVisible(true); class TimerListener implements ActionListener { public void actionPerformed(ActionEvent event) { component.moveBy(1, 1); } } ActionListener listener = new TimerListener(); final int DELAY = 100; // Milliseconds between timer ticks Timer t = new Timer(DELAY, listener); t.start(); } }
Courtesy from Lachlan:
/* Lachlan McCarty * 11-16-14 * 1.8.0_25 * LM_MovingCar.java * Write a program, YI_MovingCar.java that animates a car * so that it moves across a frame. */ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JComponent; import javax.swing.Timer; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class LM_MovingCar { private final int FRAME_WIDTH = 450; private final int FRAME_HEIGHT = 100; private final int DELAY = 100; private final LM_MovingCarComponent component = new LM_MovingCarComponent(); private final JFrame frame = new JFrame(); public LM_MovingCar() { frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setTitle("Moving Car"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(component); frame.setVisible(true); ActionListener listener = new LM_TimerListener(); Timer t = new Timer(DELAY, listener); t.start(); } public static void main(String[] args) { new LM_MovingCar(); } private class LM_TimerListener implements ActionListener { public void actionPerformed(ActionEvent event) { component.increaseCoor(1,0); } } private class LM_MovingCarComponent extends JComponent { private final int MULTIPLIER = 2; //ok to change private int xpadding = 10; // ok to change private int ypadding = 10; // ok to change private int CAR_WIDTH = 60*MULTIPLIER; // do not change private int CAR_HEIGHT = 40*MULTIPLIER; // do not change public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // turn on antialiasing so it doesn't look like crap RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHints(rh); g2.drawRect(0*MULTIPLIER+xpadding,10*MULTIPLIER+ypadding,60*MULTIPLIER,10*MULTIPLIER); g2.drawOval(10*MULTIPLIER+xpadding,20*MULTIPLIER+ypadding,10*MULTIPLIER,10*MULTIPLIER); g2.drawOval(40*MULTIPLIER+xpadding,20*MULTIPLIER+ypadding,10*MULTIPLIER,10*MULTIPLIER); g2.drawPolygon(new int[]{10*MULTIPLIER+xpadding,20*MULTIPLIER+xpadding,40*MULTIPLIER+xpadding,50*MULTIPLIER+xpadding}, new int[]{10*MULTIPLIER+ypadding,0*MULTIPLIER+ypadding,0*MULTIPLIER+ypadding,10*MULTIPLIER+ypadding}, 4); } public void increaseCoor(int x, int y) { if (xpadding+x+CAR_WIDTH <= FRAME_WIDTH) xpadding += x; if (ypadding+y+CAR_HEIGHT <= FRAME_HEIGHT) ypadding += y; repaint(); } } }
Concepts and theory:
Java Applets: Frames and Panels
A frame is a container that is used to display GUI-based Java applications.
A frame is displayed as a separate window with its own title bar.
It can be repositioned on the screen and re-sized as needed by dragging it with the mouse.
It contains small buttons in the corner of the frame that allow the frame to be minimized, maximized, and closed.
A frame is defined by the JFrame class.
A panel is also a container. However, unlike a frame, it cannot be displayed on its own.
A panel must be added to another container for it to be displayed.
Generally a panel doesn’t move unless you move the container that it’s in.
Its primary role is to help organize the other components in a GUI.
A panel is defined by the JPanel class.
Java Applets: Components and Containers
A GUI component is an object that represents a screen element that is used to display information or to allow the user to interact with the program in a certain way.
A container is a special type of component that is used to hold and organize other components.
Frames and panels are two examples of Java containers.