?? demothread.java~62~
字號:
package multimediademo;
import java.net.*;
import java.applet.*;
import java.applet.Applet;
import java.awt.image.*;
import java.awt.*;
import multimediademo.ImageFilter;
import javax.swing.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class DemoThread extends Thread{
//********************************類變量**********************************
//四個私有變量:滾動面板對象、圖像類對象、圖形對象和動畫類型值
private JScrollPane m_scroll;
private Image sourceImage, filteredImage;
private Graphics m_graph;
//1表示縮放平移動畫,2表示不擦除平移動畫,3表示淡入淡出動畫
private int m_demoType;
//申明一個圖像過濾器
ImageFilter imageFilter;
//定義初始點
int startX = 50;
int startY = 50;
boolean REPAINT_MARK;
int imageWidth,imageHeight;
int panelWidth,panelHeight;
int m_imageWidth,m_imageHeight;
int STEP = 10;
//********************************類方法**********************************
//默認構造函數
public DemoThread() {
}
//重載構造函數
public DemoThread(Image image,JScrollPane scrollPanel,int demoType){
//給私有變量賦值
sourceImage = image;
filteredImage = image;
m_scroll = scrollPanel;
m_demoType = demoType;
//獲取圖形對象
m_graph = m_scroll.getGraphics();
//獲取面板對象和圖像的尺寸
imageWidth = filteredImage.getWidth((Component)m_scroll);
imageHeight = filteredImage.getHeight((Component)m_scroll);
panelWidth = m_scroll.getWidth();
panelHeight = m_scroll.getHeight();
}
//重載線程操作函數
public void run(){
initializeRun();
//moveDirect表示圖像水平移動的方向:取true表示由左向右移動,false則表示相反的方向
boolean moveDirect = true;
while(true){
//畫動畫的第一副圖像
if(!REPAINT_MARK){
m_graph.drawImage(filteredImage,startX,startY,m_imageWidth,m_imageHeight,m_scroll);
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{}
REPAINT_MARK = true;
}
//畫動畫的其他圖像:
//m_demoType表示動畫類型,1表示縮放平移動畫,2表示不擦除平移動畫,3表示淡入淡出動畫
else{
switch (m_demoType) {
//水平移動縮放動畫
case 1:
if(moveDirect){ //圖像由左向右移動并縮小
m_graph.clearRect(startX, startY, m_imageWidth, m_imageHeight);
startX += STEP;
//判斷動畫移動是否反向
if ((startX + m_imageWidth) > panelWidth) {
startX -= STEP;
moveDirect = false;
m_graph.clearRect(startX, startY, m_imageWidth, m_imageHeight);
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{}
}
else {
m_imageWidth = (int) (m_imageWidth * 0.9);
m_imageHeight = (int) (m_imageHeight * 0.9);
startY = (panelHeight - m_imageHeight) / 2;
m_graph.drawImage(filteredImage, startX, startY, m_imageWidth,
m_imageHeight, m_scroll);
}
}
//圖像由右向左移動并放大
else{
m_graph.clearRect(startX, startY, m_imageWidth, m_imageHeight);
startX -= STEP;
//判斷動畫移動是否反向
if(startX < 10){
moveDirect = true;
startX += STEP;
m_graph.clearRect(startX, startY, m_imageWidth, m_imageHeight);
}
else{
m_imageWidth = (int) (m_imageWidth / 0.9);
m_imageHeight = (int) (m_imageHeight / 0.9);
startY = (panelHeight - m_imageHeight) / 2;
m_graph.drawImage(filteredImage, startX, startY, m_imageWidth,
m_imageHeight, m_scroll);
}
}
break;
//不擦除平移動畫
case 2:
//不擦除顯示動畫
if(moveDirect){
STEP = m_imageWidth + 10;
startX += STEP;
if ( (startX + m_imageWidth) <= panelWidth) {
m_imageWidth = (int) (m_imageWidth * 0.9);
m_imageHeight = (int) (m_imageHeight * 0.9);
startY = (panelHeight - m_imageHeight) / 2;
m_graph.drawImage(filteredImage, startX, startY, m_imageWidth,
m_imageHeight, m_scroll);
}
else{
startX -= STEP;
moveDirect = false;
}
}
//逐一擦除圖像
else{
m_graph.clearRect(startX-10,startY-10,m_imageWidth+15,
m_imageHeight+15);
m_imageWidth = (int) (m_imageWidth / 0.9) ;
m_imageHeight = (int) (m_imageHeight / 0.9);
startY = (panelHeight - m_imageHeight) / 2;
STEP = m_imageWidth + 10;
startX -= STEP;
if(startX < 0){
//擦除完所有圖像后,在顯示第一副圖像前停留1秒后畫第一副圖像
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{}
moveDirect = true;
startX = 10;
m_imageWidth = 200;
m_imageHeight = 200;
startY = (panelHeight - m_imageHeight)/2;
m_graph.drawImage(filteredImage,startX,startY,m_imageWidth,
m_imageHeight,m_scroll);
}
}
break;
//淡入淡出動畫
case 3:
m_graph.clearRect(startX,startY,m_imageWidth,m_imageHeight);
imageFilter.pixelValueChange();
filteringImage();
m_graph.drawImage(filteredImage,startX,startY,m_imageWidth,
m_imageHeight,m_scroll);
break;
//缺省狀態直接返回
default:
break;
}
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {}
}
}
}
//圖像過慮函數
private void filteringImage(){
ImageProducer producer = sourceImage.getSource();
producer = new FilteredImageSource(producer,imageFilter);
filteredImage = m_scroll.createImage(producer);
}
//初始化線程運行參數函數
public void initializeRun(){
m_imageWidth = imageWidth;
m_imageHeight = imageHeight;
if(m_imageWidth > 200)
m_imageWidth = 200;
if(m_imageHeight > 200)
m_imageHeight = 200;
//m_demoType表示動畫類型,1表示縮放平移動畫,2表示不擦除平移動畫,3表示淡入淡出動畫
switch(m_demoType){
case 1:
startX = 10;
startY = (panelHeight - m_imageHeight)/2;
STEP = 50;
break;
case 2:
startX = 10;
startY = (panelHeight - m_imageHeight)/2;
break;
case 3:
imageFilter = new ImageFilter();
m_imageWidth = 400;
m_imageHeight = 400;
startX = (panelWidth - m_imageWidth)/2;
startY = (panelHeight - m_imageHeight)/2;
break;
}
m_graph.clearRect(0,0,panelWidth,panelHeight);
REPAINT_MARK = false;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -