200 likes | 418 Views
Graphics. Coordinates The upper-left coordinate of a GUI component is (0,0) The upper left coordinate (0,0) is actually behind the title bar of the window Graphics is an abstract class that provides adevice -independent graphics interface java.awt.Graphics. Graphics.
E N D
Graphics • Coordinates • The upper-left coordinate of a GUI component is (0,0) • The upper left coordinate (0,0) is actually behind the title bar of the window • Graphics is an abstract class that provides adevice-independent graphics interface • java.awt.Graphics
Graphics Drawing Lines, Rectangles, Ovals • drawLine(intx1, int y1, int x2, int y2); • drawRect(int x, int y, int width, int height); • drawOval(int x, int y, int width, int height); • g.drawOval(100,100, 40,70); Filling Shapes • fillRect(int x, int y, int width, int height); • g.fillRect(100,100, 40,70); Drawing Strings: • drawString(String s , int x ,int y); • g.drawString(“Hello”,20,100);
Drawing Polygons and Polylines • Polygons are multisided shapes. • Polylines are a series of connected points. Some methods require a Polygon object • drawPolygon (intxPoints[], intyPoints[], intNumPoints[]); • drawPolyline(intxPoints[], intyPoints[], intNumPoints); • Constructor: • Polygon(intxPoints[], intyPoints[], intNumPoints • drawPolygon (Polygon p) int [] xvalues = {100, 200,150}; int [] yvalues = {50, 50,75}; Polygon p = new Polygon (xvalues,yvalues,3); g.drawPolygon(p);
Color • Color is a class with different private instance variables for RGB value (red, green and blue levels) • Each value range from dark (0) to light (255) • Black is (0,0,0) • White is (255,255,255) • Red is (255,0,0) • Color constants (uppercase accepted) • Color.orange, Color.red, Color.darkGray, Color.YELLOW • You can create a new color using the constructor and specifying the RGB values • Color c = new Color(255,0,0) • void setColor (Color c) is used to set the color of an object • g.setColor(Color.yellow); • Color getColor () – returns the color of an object. • g.getColor()
Font To change the font you must create a new Font object. Fontf = new Font(String fontName, intfontStyle, intfontSize) • fontName • Monospaced//Courier • SanSerif //Times New Roman • Serif or //Helvetica • fontSyle (static Constants) • Font.PLAIN • Font.ITALIC • Font.BOLD • Font.ITALIC+ Font.BOLD • fontSize (12, 18, 20) • Use void setFont (Font f) to set the font to a new style • button.setFont(f); • g.setFont(new Font(“SanSerif”,Font.ITALIC+Font.BOLD,12));
Font • If your system supports other fonts such as “Times New Roman” you can use it to create a Font Object. • g.setFont(new Font(“Times New Roman”,Font.ITALIC+Font.BOLD,12)); • To find available fonts • Create an instance of GraphicsEnvironment and use its method getAvailableFontFamilyNames() method to find available fonts // import java.awt.GraphicsEnvironment GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontNames = e.getAvailableFontFamilyNames(); for (String f: fontNames) System.out.println(f);
Drawing on JFrame • What is the paint method? • The method responsible for displaying a component on the screen • public void paint (Graphics g) • Why call the super.paint(g) first? • This ensures that the viewing area is clear before a new drawing is displayed • When is the paint method called? • Documentation: “ Called when JFrame is first displayed and any time the JFrame needs to be redisplayed as when it is obscurred by another window” • Force the Frame to be redisplayed • Call repaint() request the JFrame to be redisplayed.
Drawing on a JFrame import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Drawing2 extends JFrame { public Drawing2() { setSize(100,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint(Graphics g) { super.paint(g); System.out.println("In JFrame's Paint"); g.setColor(Color.red); g.drawOval(50,50,50,50); } public static void main (String [] args) { new Drawing2(); } } • The JFrame’s paint method should automatically be called when the window is obscure. • What happens when the … • windows overlap? • window is minimized then maximized? • window is resized?
Drawing on a Frame include a JPanel public class Drawing3 extends JFrame { JPanelpanel = new JPanel(); public Drawing3() { add(panel); panel.setBackground(Color.BLUE); setSize(100,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint(Graphics g) { super.paint(g); System.out.println("In JFrame's Paint"); g.setColor(Color.red); g.drawOval(50,50,50,50); } public static void main (String [] args) { new Drawing3(); } } • Add a panel to the center of the JFrame • Make the panel background BLUE • The panel covers the JFrame
Drawing on a Frame include a JPanel public class Drawing3 extends JFrame { JPanelpanel = new JPanel(); public Drawing3() { add(panel,BorderLayout.WEST); panel.setBackground(Color.BLUE); setSize(100,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint(Graphics g) { super.paint(g); System.out.println("In JFrame's Paint"); g.setColor(Color.red); g.drawOval(50,50,50,50); } public static void main (String [] args) { new Drawing3(); } } • Add a panel to the WEST of the JFrame • Make the panel background BLUE Blue panel Activity: Change panel width: panel.setPreferredSize(new Dimension(50,200));
Drawing on Panels • Instead of drawing on the JFrame, you can confine your drawing space to a JPanel. • Instead of overriding JPanel’s paint(), you should override paintComponent() • public void paintComponent(Graphics g) • Override the paintComponent method for most Swing objects (except JFrame and JApplet) • Call super.paintComponent(g) first. • To update display, call JPanel’s repaint()
Drawing on Panel public class Drawing5 extends JFrame{ MyPanelpanel = new MyPanel(); public Drawing5() { add(panel); setSize(300,300); //set size of entire Frame setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class MyPanel extends JPanel {public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("In MyPanel's Paint “); g.setColor(Color.green); g.fillOval(50,50,30,30); } } public static void main (String [] args) { new Drawing5();} } • Create a class for your new panel that extendsJPanel • Override paintComponent • Create an instance of the new subclass • What happens if the … • windows overlap? • window is minimized then maximized? • window is resized?
Activity • Draw a car on the screen in a panel • Declare instance fields x and y and initialize them to (50,100) • Make all coordinates relative to x and y. (x,y) 10 10 (x+50,y+50)
KeyEvent • Key events enable the use of the keys to control and perform actions or get input from the keyboard • KeyEvent has predefined static constants VK_A to VK_Z The letter keys from A to Z VK_0 to VK_9 The number keys from 0 to 9 VK_UP, VK_DOWN Up and down arrow keys VK_LEFT,VK_RIGHT Left and right arrow keys VK_CONTROL The control key
KeyEvent • Key events enable the use of the keys to control and perform actions or get input from the keyboard • KeyListener • public void keyPressed(KeyEvent e) • public void keyReleased(KeyEvent e) • public void keyTyped (KeyEvent e) • Will not be invoked for keys that do not have a Unicode( function keys, control keys, action keys) • KeyEvent methods • getKeyChar() - Returns the character associated event • getKeyCode() - Returns the keycodeassociatedevent
Activity • Use the left and right arrow keys to move the car • Hint: In the Key Listener when the user presses a Right Arrow, update the y by 10 • y+=10; • Repaint the panel
Timer Objects • Regularly generates action events at programmer-specified time intervals • Timer class is in javax.swing package • Timer (int delay, ActionListener listener) • delay is measured in milliseconds • A delay of 1000 is 1 second
Timer class methods • Timer ( int delay, ActionListener listener) • void addActionListener( ActionListener listener) • intgetDelay() • booleanisRunning(); • void setDelay(int delay) • void start(); • void stop(); Timer timer; timer = new Timer (30, new MyTimerListener()); Timer.start(); class MyTimerListenerimplements ActionListener { public static void actionPeformed(ActionEvent e) { System.out.println(“timer triggered”); } }
Activity • Create an application that displays a circle at random positions • Every 3 seconds, randomly generate a new position and display circle.