SlideShare a Scribd company logo
Java Graphics
Chris North
cs3724: HCI
Review
• 3 kinds of elements in components API?
• Layout managers
• Events
• Extend vs. Implement
Useful Java DataStructures
• Vector (dynamic array)
• V = new Vector( );
• V.add(item);
• V.elementAt(5);
• HashTable (maps keys to items)
• H = new HashTable( );
• H.add(key, item);
• H.get(key);
• Iterators (automatic FOR loops)
• I = V.iterator( );
• While (I.hasNext( ))
• dosomething(I.next( ));
Graphics
• Window is like a painter’s canvas
• App must paint its window contents
• Java components paint themselves
• Anything else: Programmer
• When to paint?
• How to paint?
JButton
How to Paint?
Pixels
Coordinate System
• Upside-down Cartesian
• Ywindow = height - Ycartesian
(0,0) (width,0)
(0,height) (width, height)
Component Hierarchy
• Each component has its own subwindow
• Subwindow = rectangular area within parent component
• Has own coordinate system
• Clipping:
• Can’t paint outside its subwindow
• Can’t paint over child components?
(0,0)
(wp, hp)
(0,0)
(wb, hb)
JPanel
JButton
JButton
Painting Components
• Can paint any component
• JPanel is good for custom graphics area
JButton
JPanel
Painting in Java
import java.awt.Graphics
import java.awt.Graphics2D // Java2
1. Get the “graphics context” of component
Graphics g = myJPanel.getGraphics( );
Graphics2D g2 = (Graphics2D) g;
2. Paint in it
g2.drawLine(x1,y1, x2,y2);
Graphics Primitives
Draw Fill
• Point (x,y)
• Line (pt1,pt2)
• PolyLine (pt list)
• Arc
• Oval (pt, w,h)
• Rectangle (pt, w,h)
• RoundRectangle
• Polygon (pt list)
• Image (file, x,y)
• Text (string, x,y) label
Graphics Attributes
• Color
• Font
• Stroke attributes:
– Line width, dash, end caps, joins, miter
• Paint attributes:
– Color, gradient, texture
• Composite:
– Blending
• Transforms:
– Translate, rotate, flip, shear, scale
Color
• Combinations of Red, Green, Blue
• Each [0, 255]
• Java: new Color(255, 150, 0)
Hokie Orange
in Java
• Drawing primitives:
• g2.drawLine( ), .drawRect( ), …
• g2.fillRect( ), …
• Object oriented:
1. Create shape:
• import java.awt.geom.*
• shape = new Point2D.Float(x, y);
• Line2D, Rect2D, CubicCurve2D, …
2. Draw the shape:
• g2.draw(shape);
• g2.fill(shape);
in Java
• Color and font:
• g2.setColor( new Color(r,g,b) );
• g2.setFont( new Font(…) );
• Advanced:
• g2.setStroke(…);
• g2.setPaint(…);
• g2.setComposite(…);
• g2.setTransform(…);
1. Set graphics attributes
2. Draw graphics
When to Paint?
Re-Paint
• Screen is like a painter’s canvas
• All windows paint on the same surface!
• Windows don’t “remember” whats under them
• Need to re-paint when portions are newly
exposed
• Receive Repaint events
• Open, resize, bring to front
• When other windows in front move, resize, close
MyApp
Open WinExp, Notepad
Close WinExplorer
Repaint event sent to: MyApp, Desktop
Desktop gets repaint event
MyApp gets repaint event
MyApp JPanel gets repaint event
MyApp gets repaint event
MyApp JPanel forwards repaint event to JButton
Repainting Static Graphics
• Repaint event:
• Erase subwindow (fill with background color)
• Draw subwindow contents
In Java
• Repaint event:
• Java Swing components catch repaint event,
and call their paintComponent( ) method
• Default paintComponent( ) method paints component
– E.g. panel background color
• Sub-class the component (typically JPanel)
• Over-ride paintComponent( ) method
• Custom graphics here
• Can call repaint( ) to invoke paintComponent( )
Code
public class MyPanel extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g); // erases background
Graphics2D g2 = (Graphics2D)g; //cast for java2
// my graphics:
g2.setColor(new Color(255,0,0));
g2.fillRect(10,10,200,50);
g2.setColor(new Color(0,0,0));
g2.drawString("Hello World", 10, 10);
}
}
Hello World
Typical program structure for
Dynamic Graphics
• Store data structure of window contents
• E.g. user drawn picture in paint program
• Repaint event:
• Erase window (draw background color)
• Draw window contents using data structure
• Other event that alters window contents:
• modify the data structure
• send repaint event
In JBuilder
• Subclassing JPanel
• Overriding paintComponent( )
• Using subclassed JPanel in a JFrame
Storing window contents
• 2 approaches:
• Store logical contents in a data structure
» E.g. drawing program: lines, shapes, colors, …
»
• Store visual contents as an off-screen image (bitmap)
» E.g. pixels
» Then use g2.drawImage( ) in paintComponent( )
»
Problem: Flashing
• Ugly flashing when repaint:
• Paint background
• Redraw shapes
Solution: Double buffering
Solution: Double buffering
• Double buffered repaint:
• Draw all graphics in temporary off-screen image
» Paint background color
» Paint shapes
• Then paint image to JPanel
• Bonus: Swing does this for you!
• Draw graphics on JPanel
• JPanel maintains off-screen image
What Subwindows Do
• Directs mouse input to correct component
• Determines repaint events
• Own coordinate system
• Don’t need repaint when moving
• Clipping: hides drawing behind a subwindow
• Some subwindows remember what’s under them:
• Popup menus

More Related Content

PDF
10java 2d
PPTX
Game Development for Nokia Asha Devices with Java ME #2
PPT
Java Graphics
PPTX
U5 JAVA.pptx
PPTX
Trident International Graphics Workshop 2014 1/5
PPTX
Image processing in MATLAB
PPTX
Image Processing Using MATLAB
PDF
Graphicsand animations devoxx2010 (1)
10java 2d
Game Development for Nokia Asha Devices with Java ME #2
Java Graphics
U5 JAVA.pptx
Trident International Graphics Workshop 2014 1/5
Image processing in MATLAB
Image Processing Using MATLAB
Graphicsand animations devoxx2010 (1)

Similar to Java4-Graphics.ppt (20)

PPTX
Graphics in C++
PPTX
Witekio custom modern qt quick components
PPTX
PPTX
31csharp
PPTX
Graphics mod
PDF
Real life XNA
PPT
Circles graphic
PPTX
PPTX
JSLounge - TypeScript 소개
PDF
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
PDF
C++ Windows Forms L09 - GDI P2
KEY
2011/11/20 modul8 workshop at Apple Store Ginza
PDF
Model View Intent on Android
PDF
Creating an Uber Clone - Part IV - Transcript.pdf
PPT
Opengl (1)
PPTX
Chapter02 graphics-programming
PDF
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
PPT
Svcc Java2D And Groovy
PDF
How the Go runtime implement maps efficiently
PPTX
Graphics Programming in C
Graphics in C++
Witekio custom modern qt quick components
31csharp
Graphics mod
Real life XNA
Circles graphic
JSLounge - TypeScript 소개
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
C++ Windows Forms L09 - GDI P2
2011/11/20 modul8 workshop at Apple Store Ginza
Model View Intent on Android
Creating an Uber Clone - Part IV - Transcript.pdf
Opengl (1)
Chapter02 graphics-programming
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Svcc Java2D And Groovy
How the Go runtime implement maps efficiently
Graphics Programming in C
Ad

More from DeekshithSkandaM (7)

PPTX
Recent advances in green electronics^.pptx
PPTX
Solar mobile phone charger.pptx
PPTX
RF SIGNAL IDENTIFIER PPT.pptx
PPTX
VB PROPERTIES.pptx
PPTX
E4 unit 2 combitional circuits.pptx
PPTX
math.pptx
PDF
Operators-WPS Office.pdf
Recent advances in green electronics^.pptx
Solar mobile phone charger.pptx
RF SIGNAL IDENTIFIER PPT.pptx
VB PROPERTIES.pptx
E4 unit 2 combitional circuits.pptx
math.pptx
Operators-WPS Office.pdf
Ad

Recently uploaded (20)

PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
01-Introduction-to-Information-Management.pdf
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
RTP_AR_KS1_Tutor's Guide_English [FOR REPRODUCTION].pdf
PPTX
Orientation - ARALprogram of Deped to the Parents.pptx
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
Cell Structure & Organelles in detailed.
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Pharma ospi slides which help in ospi learning
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
Complications of Minimal Access Surgery at WLH
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
Pharmacology of Heart Failure /Pharmacotherapy of CHF
01-Introduction-to-Information-Management.pdf
O7-L3 Supply Chain Operations - ICLT Program
RTP_AR_KS1_Tutor's Guide_English [FOR REPRODUCTION].pdf
Orientation - ARALprogram of Deped to the Parents.pptx
FourierSeries-QuestionsWithAnswers(Part-A).pdf
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
Final Presentation General Medicine 03-08-2024.pptx
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
STATICS OF THE RIGID BODIES Hibbelers.pdf
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Module 4: Burden of Disease Tutorial Slides S2 2025
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Cell Structure & Organelles in detailed.
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Pharma ospi slides which help in ospi learning
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
Microbial disease of the cardiovascular and lymphatic systems
Complications of Minimal Access Surgery at WLH
202450812 BayCHI UCSC-SV 20250812 v17.pptx

Java4-Graphics.ppt

  • 2. Review • 3 kinds of elements in components API? • Layout managers • Events • Extend vs. Implement
  • 3. Useful Java DataStructures • Vector (dynamic array) • V = new Vector( ); • V.add(item); • V.elementAt(5); • HashTable (maps keys to items) • H = new HashTable( ); • H.add(key, item); • H.get(key); • Iterators (automatic FOR loops) • I = V.iterator( ); • While (I.hasNext( )) • dosomething(I.next( ));
  • 4. Graphics • Window is like a painter’s canvas • App must paint its window contents • Java components paint themselves • Anything else: Programmer • When to paint? • How to paint? JButton
  • 7. Coordinate System • Upside-down Cartesian • Ywindow = height - Ycartesian (0,0) (width,0) (0,height) (width, height)
  • 8. Component Hierarchy • Each component has its own subwindow • Subwindow = rectangular area within parent component • Has own coordinate system • Clipping: • Can’t paint outside its subwindow • Can’t paint over child components? (0,0) (wp, hp) (0,0) (wb, hb) JPanel JButton JButton
  • 9. Painting Components • Can paint any component • JPanel is good for custom graphics area JButton JPanel
  • 10. Painting in Java import java.awt.Graphics import java.awt.Graphics2D // Java2 1. Get the “graphics context” of component Graphics g = myJPanel.getGraphics( ); Graphics2D g2 = (Graphics2D) g; 2. Paint in it g2.drawLine(x1,y1, x2,y2);
  • 11. Graphics Primitives Draw Fill • Point (x,y) • Line (pt1,pt2) • PolyLine (pt list) • Arc • Oval (pt, w,h) • Rectangle (pt, w,h) • RoundRectangle • Polygon (pt list) • Image (file, x,y) • Text (string, x,y) label
  • 12. Graphics Attributes • Color • Font • Stroke attributes: – Line width, dash, end caps, joins, miter • Paint attributes: – Color, gradient, texture • Composite: – Blending • Transforms: – Translate, rotate, flip, shear, scale
  • 13. Color • Combinations of Red, Green, Blue • Each [0, 255] • Java: new Color(255, 150, 0) Hokie Orange
  • 14. in Java • Drawing primitives: • g2.drawLine( ), .drawRect( ), … • g2.fillRect( ), … • Object oriented: 1. Create shape: • import java.awt.geom.* • shape = new Point2D.Float(x, y); • Line2D, Rect2D, CubicCurve2D, … 2. Draw the shape: • g2.draw(shape); • g2.fill(shape);
  • 15. in Java • Color and font: • g2.setColor( new Color(r,g,b) ); • g2.setFont( new Font(…) ); • Advanced: • g2.setStroke(…); • g2.setPaint(…); • g2.setComposite(…); • g2.setTransform(…); 1. Set graphics attributes 2. Draw graphics
  • 17. Re-Paint • Screen is like a painter’s canvas • All windows paint on the same surface! • Windows don’t “remember” whats under them • Need to re-paint when portions are newly exposed • Receive Repaint events • Open, resize, bring to front • When other windows in front move, resize, close
  • 18. MyApp
  • 20. Close WinExplorer Repaint event sent to: MyApp, Desktop
  • 22. MyApp gets repaint event MyApp JPanel gets repaint event
  • 23. MyApp gets repaint event MyApp JPanel forwards repaint event to JButton
  • 24. Repainting Static Graphics • Repaint event: • Erase subwindow (fill with background color) • Draw subwindow contents
  • 25. In Java • Repaint event: • Java Swing components catch repaint event, and call their paintComponent( ) method • Default paintComponent( ) method paints component – E.g. panel background color • Sub-class the component (typically JPanel) • Over-ride paintComponent( ) method • Custom graphics here • Can call repaint( ) to invoke paintComponent( )
  • 26. Code public class MyPanel extends JPanel { public void paintComponent(Graphics g){ super.paintComponent(g); // erases background Graphics2D g2 = (Graphics2D)g; //cast for java2 // my graphics: g2.setColor(new Color(255,0,0)); g2.fillRect(10,10,200,50); g2.setColor(new Color(0,0,0)); g2.drawString("Hello World", 10, 10); } } Hello World
  • 27. Typical program structure for Dynamic Graphics • Store data structure of window contents • E.g. user drawn picture in paint program • Repaint event: • Erase window (draw background color) • Draw window contents using data structure • Other event that alters window contents: • modify the data structure • send repaint event
  • 28. In JBuilder • Subclassing JPanel • Overriding paintComponent( ) • Using subclassed JPanel in a JFrame
  • 29. Storing window contents • 2 approaches: • Store logical contents in a data structure » E.g. drawing program: lines, shapes, colors, … » • Store visual contents as an off-screen image (bitmap) » E.g. pixels » Then use g2.drawImage( ) in paintComponent( ) »
  • 30. Problem: Flashing • Ugly flashing when repaint: • Paint background • Redraw shapes
  • 32. Solution: Double buffering • Double buffered repaint: • Draw all graphics in temporary off-screen image » Paint background color » Paint shapes • Then paint image to JPanel • Bonus: Swing does this for you! • Draw graphics on JPanel • JPanel maintains off-screen image
  • 33. What Subwindows Do • Directs mouse input to correct component • Determines repaint events • Own coordinate system • Don’t need repaint when moving • Clipping: hides drawing behind a subwindow • Some subwindows remember what’s under them: • Popup menus