圖像顯示
1 使用Graphics.drawImage(Image img, int x, int y, ImageObserver observer)
方法顯示圖像。
2 使用Component.getToolkit.getImage(String path)語句獲得Image實例對象。
例:
package drawimage;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class DrawImage extends Frame
{
private static final long serialVersionUID = 1L;
public DrawImage()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public static void main(String[] args)
{
System.out.println("Starting DrawImage.");
DrawImage mainFrame = new DrawImage();
Image img = mainFrame.getToolkit().getImage("love.jpg");
mainFrame.setSize(400,400);
mainFrame.setTitle("DrawImage");
mainFrame.setVisible(true);
Graphics g = mainFrame.getGraphics();
while(!g.drawImage(img,150,150,mainFrame));
}
}
圖像重畫
package drawimage;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class DrawImage extends Frame
{
Image img = getToolkit().getImage("love.jpg");
private static final long serialVersionUID = 1L;
public void paint(Graphics g)
{
g.drawImage(img,0,0,this);
}
public DrawImage()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public static void main(String[] args)
{
System.out.println("Starting DrawImage.");
DrawImage mainFrame = new DrawImage();
mainFrame.setSize(400,400);
mainFrame.setTitle("DrawImage");
mainFrame.setVisible(true);
/*Graphics g = mainFrame.getGraphics();
while(!g.drawImage(img,150,150,mainFrame));
*/
}
}
雙緩沖技術:
1 Component.createImage方法創建內存Image對象
2 在Image對象上進行繪制的結果就成了一幅圖像
3 在Image對象上執行與組件表面同樣的繪制,Image
對象中的圖像就是組件表面內容的復制,當組件重畫 時,只需要將內存中的Image對象在組件上畫出;
package drawline;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//import java.util.Enumeration;
import java.util.Vector;
public class DrawLine1 extends Frame
{
int orgX;
int orgY;
int endX;
int endY;
Image oimg = null;
Graphics og = null;
Vector<MyLine> vLines = new Vector<MyLine>();
public void paint(Graphics g)
{
if(oimg != null)
{
g.drawImage(oimg,0,0,this);
}
/*g.setColor(Color.RED);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
Enumeration<MyLine> e = vLines.elements();
while(e.hasMoreElements())
{
MyLine line = (MyLine)e.nextElement();
line.drawMe(g);
}*/
//g.drawLine(orgX, orgY, endX, endY);
}
private static final long serialVersionUID = 9004940250333651314L;
public DrawLine1()
{
setSize(400,400);
setTitle("Drawline");
setVisible(true);
Dimension d = getSize();
oimg = createImage(d.width,d.height);
og = oimg.getGraphics();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
orgX = e.getX();
orgY = e.getY();
}
public void mouseReleased(MouseEvent e)
{
endX = e.getX();
endY = e.getY();
Graphics g = getGraphics();
g.setColor(Color.RED);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
g.drawString(orgX + "," + orgY,orgX,orgY);
g.drawString(e.getX() + "," + e.getY(), e.getX(),e.getY());
g.drawLine(orgX, orgY, e.getX(),e.getY());
og.setColor(Color.RED);
og.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
og.drawString(orgX + "," + orgY,orgX,orgY);
og.drawString(e.getX() + "," + e.getY(), e.getX(),e.getY());
og.drawLine(orgX, orgY, e.getX(),e.getY());
/*vLines.add(new MyLine(orgX,orgY,endX,endY));
repaint();*/
}//為什么用getGraphics().setColor(Color.RED)是不用導java.awt.Graphics包
//Enumeration<MyLine>???????????????????????????
});
}
public static void main( String[] args) {
System.out.println("String DrawLine");
new DrawLine1();
}
}
//構建主框架對象時是先調用paint()還是構造函數
Graphics類與圖形繪制
Componentp.getGraphics方法與Grahpics類
Graphics.drawLine(int x1,int y1,int x2, int y2)方法;
Graphics.drawStringString str,int x,int y)方法;
Graphics.drawSting方法的坐標參數是以坐下方為參考點的;
例:
package drawline;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class DrawLine extends Frame {
private static final long serialVersionUID = 9004940250333651314L;
public DrawLine()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter()
{
int orgX;
int orgY;
public void mousePressed(MouseEvent e)
{
orgX = e.getX();
orgY = e.getY();
}
public void mouseReleased(MouseEvent e)
{
Graphics g = getGraphics();
g.setColor(Color.RED);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
g.drawString(orgX + "," + orgY,orgX,orgY);
g.drawString(e.getX() + "," + e.getY(), e.getX(),e.getY());
g.drawLine(orgX, orgY, e.getX(),e.getY());
}//為什么用getGraphics().setColor(Color.RED)是不用導java.awt.Graphics包
});
}
public static void main( String[] args) {
System.out.println("String DrawLine");
DrawLine mainFrame = new DrawLine();
mainFrame.setSize(400,400);
mainFrame.setTitle("Drawline");
mainFrame.setVisible(true);
}
}
組件重建的處理:
1 組件重繪的原理 曝光
2 paint(Graphics g)的作用
AWT組件重繪路線:
AWT Thread ->paint() ->AWT Thread
repaint()+AWT Thread ->update(清除組件表面內容調用paint()方法)->paint();
例:
package drawline;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Enumeration;
import java.util.Vector;
public class DrawLine extends Frame
{
int orgX;
int orgY;
int endX;
int endY;
Vector<MyLine> vLines = new Vector<MyLine>();
public void paint(Graphics g)
{
g.setColor(Color.RED);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
Enumeration<MyLine> e = vLines.elements();
while(e.hasMoreElements())
{
MyLine line = (MyLine)e.nextElement();
line.drawMe(g);
}
//g.drawLine(orgX, orgY, endX, endY);
}
private static final long serialVersionUID = 9004940250333651314L;
public DrawLine()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
orgX = e.getX();
orgY = e.getY();
}
public void mouseReleased(MouseEvent e)
{
endX = e.getX();
endY = e.getY();
/*Graphics g = getGraphics();
g.setColor(Color.RED);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
g.drawString(orgX + "," + orgY,orgX,orgY);
g.drawString(e.getX() + "," + e.getY(), e.getX(),e.getY());
g.drawLine(orgX, orgY, e.getX(),e.getY());
*/
vLines.add(new MyLine(orgX,orgY,endX,endY));
repaint();
}//為什么用getGraphics().setColor(Color.RED)是不用導java.awt.Graphics包
//Enumeration<MyLine>???????????????????????????
});
}
public static void main( String[] args) {
System.out.println("String DrawLine");
DrawLine mainFrame = new DrawLine();
mainFrame.setSize(400,400);
mainFrame.setTitle("Drawline");
mainFrame.setVisible(true);
}
}
package drawline;
import java.awt.Graphics;
public class MyLine
{
private int orgX;
private int orgY;
private int endX;
private int endY;
public MyLine(int orgX, int orgY, int endX, int endY)
{
this.orgX = orgX;
this.orgY = orgY;
this.endX = endX;
this.endY = endY;
}
public void drawMe(Graphics g)
{
System.out.println(orgX + "," + orgY + " "+endX + "," + endY);
g.drawString(orgX + "," + orgY,orgX,orgY);
g.drawString(endX + "," + endY,endX,endY);
g.drawLine(orgX, orgY, endX, endY);
}
}