1. 程式人生 > >談一談java中的Canves機制

談一談java中的Canves機制

getx 包括 true 事情 操作 應用 感覺 todo canvas

0--寫在前面:

  很多初學java的童鞋,常常很苦惱,一天天的都跟命令行較勁,好像很無聊的樣子,如果能跳出命令行做出界面甚至一個畫圖界面,那將是一件很興奮的事情;也可以讓編程變的有趣;有腦洞的同學還可以利用圖像做出java小遊戲來;話不多說開整;

1--什麽是javaGUI組件:

  GUI組件是java為用戶提供的一個圖形界面接口,通俗的說就是java中提供了一些類,大家可以用這些類創造各種窗口呀,文本框呀,面板什麽的;並且提供了一些布局方式,也就是我們所說的布局管理器,這個隨筆主要講一下Canves這個組件的功能;這些組件幾乎都被包含在java.awt 和java.swing包中(當然我沒有包括第三方包),個人感覺Swing中的組件顏值都比awt中的高

2--什麽是Canves;

  從翻譯上講,canves是畫布,帆布的意思,我也習慣把這個組件直接稱為畫布,因為我們可以根據自己的想象,畫出任意自己想要的東西,Canves在java的awt包中 ,要實現它有三個方法paint(g),update(g),repaint(g);

3--如何使用canves:

  Canves在創造出來自後,首先會調用paint方法,paint方法中有一個g參數;是java.awt.Graphics 類的子類的對象,可以用這個對象對畫布驚醒任何操作;想畫圓畫圓,想畫方畫方毫無壓力;畫好後這個圖就不動了;第一步就是重寫這個paint方法;在canves生成後,在要做的就是怎麽重重繪了,重寫update(g)方法和上面g的用法一樣;然後需要重繪會後Canves會調用一個新的線程

來重繪這個canves;簡單說就是在生成第一個圖的時候,調用的是paint,之後需要外部的一個update來調用你重寫過的repaint來進行重繪;

------文字是蒼白的,上代碼吧;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JButton;
import
javax.swing.JFrame; public class App extends Canvas { JButton jb=new JButton(); ArrayList<Line> list=new ArrayList<Line>(); Line lastline=new Line(); Bean lastbean=null; public App() { this.setPreferredSize(new Dimension(300,300)); } public void paint(java.awt.Graphics g) { App that=this; this.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub // TODO Auto-generated method stub int x=e.getX(); int y=e.getY(); if(that.lastbean==null) { that.lastbean=new Bean(x-1,y); } Bean nowPoint=new Bean(x,y); System.out.println("nowpoint:x:"+x+",y:"+y); System.out.println("lastbean:x:"+x+",y:"+y); System.out.println(that.lastline.beans.size()); that.lastline.add(nowPoint); that.repaint(); } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }); } public void update(java.awt.Graphics g) { //g.clearRect(0, 0, 300, 300); /*if(list.isEmpty()) { }else{*/ Bean bean=this.lastline.getlast(); System.out.println("-----------------"); g.setColor(Color.black); g.drawLine(lastbean.getX(), lastbean.getY(), bean.getX(),bean.getY()); this.lastbean=this.lastline.getlast(); //} } public static void main(String[] args) { // TODO Auto-generated method stub JFrame j=new JFrame(); j.add(new App()); j.pack(); j.setVisible(true); } }

這段代碼實現了第一次繪圖和重繪,只要在面板上點擊就會在面板上挨個連點;

預告一下下一篇博客,應該是應用這次的繪圖和上一次的socket結合實現一個你畫我猜;

談一談java中的Canves機制