import java.awt.*; /** A Circle component built using a Canvas. * */ public class Circle extends Canvas { private int width, height; public Circle(Color foreground, int radius) { setForeground(foreground); width = 2*radius; height = 2*radius; setSize(width, height); } public void paint(Graphics g) { g.fillOval(0, 0, width, height); } public void setCenter(int x, int y) { setLocation(x - width/2, y - height/2); } }
Aug 26
A Circle component built using a Canvas
Aug 26
Simplifies the setting of native look and feel
WindowUtilities.java Simplifies the setting of native look and feel. #################### import javax.swing.*; import java.awt.*; // For Color and Container classes. /** A few utilities that simplify using windows in Swing. * ################### public class WindowUtilities { /** Tell system to use native look and feel, as in previous * releases. Metal (Java) LAF is the default otherwise. */ public static void setNativeLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { System.out.println("Error setting native LAF: " + e); } } public static void setJavaLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch(Exception e) { System.out.println("Error setting Java LAF: " + e); } } public static void setMotifLookAndFeel() { try { UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); } catch(Exception e) { System.out.println("Error setting Motif LAF: " + e); } } /** A simplified way to see a JPanel or other Container. Pops * up a JFrame with specified Container as the content pane. */ public static JFrame openInJFrame(Container content, int width, int height, String title, Color bgColor) { JFrame frame = new JFrame(title); frame.setBackground(bgColor); content.setBackground(bgColor); frame.setSize(width, height); frame.setContentPane(content); frame.addWindowListener(new ExitListener()); frame.setVisible(true); return(frame); } /** Uses Color.white as the background color. */ public static JFrame openInJFrame(Container content, int width, int height, String title) { return(openInJFrame(content, width, height, title, Color.white)); } /** Uses Color.white as the background color, and the * name of the Container's class as the JFrame title. */ public static JFrame openInJFrame(Container content, int width, int height) { return(openInJFrame(content, width, height, content.getClass().getName(), Color.white)); } }
Aug 26
Using the this reference in class Ship3
/./././././././././. // Give Ship3 a constructor to let the instance variables // be specified when the object is created. /./././././././././ class Ship3 { public double x, y, speed, direction; public String name; public Ship3(double x, double y, double speed, double direction, String name) { this.x = x; // "this" differentiates instance vars this.y = y; // from local vars. this.speed = speed; this.direction = direction; this.name = name; } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); } public void move() { double angle = degreesToRadians(direction); x = x + speed * Math.cos(angle); y = y + speed * Math.sin(angle); } public void printLocation() { System.out.println(name + " is at " + "(" + x + "," + y + ")."); } } public class Test3 { public static void main(String[] args) { Ship3 s1 = new Ship3(0.0, 0.0, 1.0, 0.0, "Ship1"); Ship3 s2 = new Ship3(0.0, 0.0, 2.0, 135.0, "Ship2"); s1.move(); s2.move(); s1.printLocation(); s2.printLocation(); } }
Aug 26
DashedStrokeExample.java Draws a circle with a dashed line segment (border). Inherits from FontExample.java.
>>>>>>>>>>>>>>>>> import java.awt.*; /** An example of creating a custom dashed line for drawing. * ********************* public class DashedStrokeExample extends FontExample { public void paintComponent(Graphics g) { clear(g); Graphics2D g2d = (Graphics2D)g; drawGradientCircle(g2d); drawBigString(g2d); drawDashedCircleOutline(g2d); } protected void drawDashedCircleOutline(Graphics2D g2d) { g2d.setPaint(Color.blue); // 30-pixel line, 10-pixel gap, 10-pixel line, 10-pixel gap float[] dashPattern = { 30, 10, 10, 10 }; g2d.setStroke(new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10, dashPattern, 0)); g2d.draw(getCircle()); } public static void main(String[] args) { WindowUtilities.openInJFrame(new DashedStrokeExample(), 380, 400); } } <<<<<<<<<<<<<<
Aug 26
draws a circle wherever mouse was pressed
CircleListener.java A subclass of MouseAdapter that draws a circle wherever mouse was pressed. Illustrates first approach to event-handling with listeners: attaching a separate listener
***********
import java.applet.Applet; import java.awt.*; import java.awt.event.*; /** The listener used by CircleDrawer1. Note call * to getSource to obtain reference to the applet. * *************** public class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Applet app = (Applet)event.getSource(); Graphics g = app.getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } }
Aug 26
Six buttons arranged in a 2 row x 3 column grid by GridLayout
/././././././ GridTest.java Six buttons arranged in a 2 row x 3 column grid by GridLayout.GridLayout divides the window into equal-sized rectangles based upon the number of rows and columns specified. ****************** import java.applet.Applet; import java.awt.*; /** An example of GridLayout. * /./././././. public class GridTest extends Applet { public void init() { setLayout(new GridLayout(2,3)); // 2 rows, 3 cols add(new Button("Button One")); add(new Button("Button Two")); add(new Button("Button Three")); add(new Button("Button Four")); add(new Button("Button Five")); add(new Button("Button Six")); } }
Aug 26
ListEvent2.java
# ListEvents.java Uses the following classes: * CloseableFrame.java * SelectionReporter.java * ActionReporter.java /././././././././././././ import java.awt.event.*; /././././././ public class ListEvents2 extends ListEvents { public static void main(String[] args) { new ListEvents2(); } /** Extends ListEvents with the twist that * typing any of the letters of "JAVA" or "java" * over the language list will result in "Java" * being selected */ public ListEvents2() { super(); // Create a KeyAdapter and attach it to languageList. // Since this is an inner class, it has access // to nonpublic data (such as the ListEvent's // protected showJava method). KeyAdapter javaChooser = new KeyAdapter() { public void keyPressed(KeyEvent event) { int key = event.getKeyChar(); if ("JAVAjava".indexOf(key) != -1) { showJava(); } } }; languageList.addKeyListener(javaChooser); } } *************************** import java.awt.*; import java.awt.event.*; /** A class to demonstrate list selection/deselection * and action events. * /*******************/.> public class ListEvents extends CloseableFrame { public static void main(String[] args) { new ListEvents(); } protected List languageList; private TextField selectionField, actionField; private String selection = "[NONE]", action; /** Build a Frame with list of language choices * and two textfields to show the last selected * and last activated items from this list. */ public ListEvents() { super("List Events"); setFont(new Font("Serif", Font.BOLD, 16)); add(makeLanguagePanel(), BorderLayout.WEST); add(makeReportPanel(), BorderLayout.CENTER); pack(); setVisible(true); } // Create Panel containing List with language choices. // Constructor puts this at left side of Frame. private Panel makeLanguagePanel() { Panel languagePanel = new Panel(); languagePanel.setLayout(new BorderLayout()); languagePanel.add(new Label("Choose Language"), BorderLayout.NORTH); languageList = new List(3); String[] languages = { "Ada", "C", "C++", "Common Lisp", "Eiffel", "Forth", "Fortran", "Java", "Pascal", "Perl", "Scheme", "Smalltalk" }; for(int i=0; i
Aug 26
A Frame that can actually quit
import java.awt.*; import java.awt.event.*; /** A Frame that you can actually quit. Used as the starting * point for most Java 1.1 graphical applications. * public class CloseableFrame extends Frame { public CloseableFrame(String title) { super(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } /** Since we are doing something permanent, we need * to call super.processWindowEvent first. */ public void processWindowEvent(WindowEvent event) { super.processWindowEvent(event); // Handle listeners. if (event.getID() == WindowEvent.WINDOW_CLOSING) { // If the frame is used in an applet, use dispose(). System.exit(0); } } }
Aug 26
creating a simple Swing application using a JFrame
JFrameExample.java Demonstrates creating a simple Swing application using a JFrame. As with a JApplet, components must be added to the content pane, instead of the window directly.import java.awt.*;
import javax.swing.*; /** Tiny example showing the main difference in using * JFrame instead of Frame: using the content pane * and getting the Java (Metal) look and feel by default * instead of the native look and feel. * */ public class JFrameExample { public static void main(String[] args) { WindowUtilities.setNativeLookAndFeel(); JFrame f = new JFrame("This is a test"); f.setSize(400, 150); Container content = f.getContentPane(); content.setBackground(Color.white); content.setLayout(new FlowLayout()); content.add(new JButton("Button 1")); content.add(new JButton("Button 2")); content.add(new JButton("Button 3")); f.addWindowListener(new ExitListener()); f.setVisible(true); } }
Aug 26
Explicit placement of five buttons with the layout manager turned off
NullTest.java Explicit placement of five buttons with the layout manager turned off (set to null) ########################## import java.applet.Applet; import java.awt.*; /** Layout managers are intended to help you, but there * is no law saying you have to use them. * Set the layout to null to turn them off. * ******************* public class NullTest extends Applet { public void init() { setLayout(null); Button b1 = new Button("Button 1"); Button b2 = new Button("Button 2"); Button b3 = new Button("Button 3"); Button b4 = new Button("Button 4"); Button b5 = new Button("Button 5"); b1.setBounds(0, 0, 150, 50); b2.setBounds(150, 0, 75, 50); b3.setBounds(225, 0, 75, 50); b4.setBounds(25, 60, 100, 40); b5.setBounds(175, 60, 100, 40); add(b1); add(b2); add(b3); add(b4); add(b5); } }