Java GUI能展示出不同对话框、窗口等等组件外观的本质其实就是绘图。
在AWT中,真正提供绘图功能的是Graphics对象,在Component中提供了三个方法来完成组件图形的绘制与刷新。
方法名 | 说明 |
Paint(Graphics g) | 绘制组件的外观 |
update(Graphics g) | 内部调用paint方法,刷新组件的外观 |
repaint() | 调用update方法,刷新组件的外观 |
一般情况下,Paint和update由系统调用,如果程序想要重新绘制组件可以使用repaint()。
AWT提供了Canvas作为画布,提供了Graphics作为画笔,通过调用Graphics的setColor方法可以改变颜色。
步骤:
1.自定义类,继承Canvas类,重写Paint方法完成绘制。
2.在Paint方法真正的开始绘画之前,通过调用setColor、setFont等方法设置画笔的颜色、字体等属性。
3.调用画笔的drawXxx方法开始绘画
方法名 | 说明 |
setColor(Color c) | 设置颜色 |
setFont(Font font) | 设置字体 |
drawLine() | 绘画直线 |
drawRect() | 绘画矩形 |
drawRoundRect() | 绘画圆角矩形 |
drawOval() | 绘画椭圆形 |
drawPolygon() | 绘画多边形 |
drawArc() | 绘画圆弧 |
drawPolyLine() | 绘画折线 |
fillRect() | 填充矩形 |
fillRoundRect() | 填充圆角矩形 |
fillOval() | 填充椭圆 |
fillPolygon() | 填充多边形 |
fillArc() | 填充圆弧 |
drawImage() | 绘画位图 |
1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.ActionEvent; 4 import java.awt.event.ActionListener; 5 import java.awt.event.WindowAdapter; 6 import java.awt.event.WindowEvent; 7 8 public class simpleDrawDemo { 9 private final String RECT_SHAPE = "rect"; 10 private final String OVAL_SHAPE = "oval"; 11 private String shape = ""; 12 13 Frame frame = new Frame("简单绘图实验"); 14 15 Button rect = new Button("绘制矩形"); 16 Button oval = new Button("绘制椭圆"); 17 18 private class MyCanvas extends Canvas{ 19 @Override 20 public void paint(Graphics g){ 21 if (shape.equals(RECT_SHAPE)){ 22 g.setColor(Color.PINK); 23 g.drawRect(100,100,300,200); 24 }else if (shape.equals(OVAL_SHAPE)){ 25 g.setColor(Color.PINK); 26 g.drawOval(100,100,300,200); 27 } 28 } 29 } 30 31 MyCanvas canvas = new MyCanvas(); 32 33 public void init(){ 34 rect.addActionListener(new ActionListener() { 35 @Override 36 public void actionPerformed(ActionEvent e) { 37 shape = RECT_SHAPE; 38 canvas.repaint(); 39 } 40 }); 41 42 oval.addActionListener(new ActionListener() { 43 @Override 44 public void actionPerformed(ActionEvent e) { 45 shape = OVAL_SHAPE; 46 canvas.repaint(); 47 } 48 }); 49 50 frame.addWindowListener(new WindowAdapter() { 51 @Override 52 public void windowClosing(WindowEvent e) { 53 System.exit(0); 54 } 55 }); 56 canvas.setPreferredSize(new Dimension(600,400)); 57 Box buttonBox = Box.createHorizontalBox(); 58 buttonBox.add(rect); 59 buttonBox.add(oval); 60 frame.add(canvas,BorderLayout.NORTH); 61 frame.add(buttonBox,BorderLayout.SOUTH); 62 63 frame.pack(); 64 frame.setVisible(true); 65 } 66 67 public static void main(String[] args) { 68 new simpleDrawDemo().init(); 69 } 70 }
原文:https://www.cnblogs.com/zhiyDev/p/14105074.html