Java swing圖形編程實例,設置圖片文件夾,圖片跑動和大小-《自學內容》【詩書畫唱】

gif透明背景圖片素材:





素材獲取方法:

筆記:

建圖片文件夾的方法:

實例一:點擊開始按鈕后單個圖片會跑動(簡易版)





package swingXianCheng;
public class mains {
public static void main(String[] args) {
new swingXianCheng();
}
}


package swingXianCheng;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class swingXianCheng extends JFrame {
// mianBan:面板
mianBanClass mianBan=new mianBanClass();
//startAnNiu開始的按鈕
JButton startAnNiu=new JButton("開始") ;
//firstWeiYi開始的位移
int firstWeiYi=0;
//image形象
Image img=Toolkit.getDefaultToolkit().createImage("imgRun\\gif.gif");
//toolkit工具包
//swingXianCheng:swing線程
public swingXianCheng() {
startAnNiu.addActionListener (new ActionListener(){
@Override
public void actionPerformed (ActionEvent e) {
//thread線
//線程(英文:thread)
new MyThread().start();
//start()可以用以啟動線程
//start開始
}
}) ;
mianBan.add(startAnNiu) ;
add(mianBan);
setSize(900,600) ;
setLocation(200,100) ;
//operation運作
//exit退出
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ;
setVisible(true) ;}
class MyThread extends Thread{
@Override
public void run() {
// firstWeiYi<=800改為true后圖片點擊開始后就會一直跑
while (firstWeiYi<=800) {
try {
Thread.sleep(100) ;
//線程休眠(暫停占用CPU)100毫秒? 主要是用于自己的軟件設置的時間問題,
//這個軟件設置不能大于2000.
//Thread sleep()休眠就是讓線程進入休眠狀態(tài)TIMED_WAITING,
//sleep("毫秒數(shù)"),當休眠時間到了之后繼續(xù)線程。
//一條線程指的是進程中一個單一順序的控制流,一個進程中可以并行多個線程,
//每條線程并行執(zhí)行不同的任務。
}?
//捕捉異常
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace() ;}
firstWeiYi+=15;
mianBan.repaint() ;
//repaint 重繪此組件
//paintComponent()方法繪圖后, 在需要重新
//繪制圖形時,必須通過相應的事件來調
//用repaint()方法。
//component 組成部分,C++ Builder中叫組件,Delphi中叫部件,
//(簡而言之,組件就是對象。)
//C++Builder是由Borland公司推出的一款可視化集成開發(fā)工具。
//Delphi,是Windows平臺下著名的快速應用程序開發(fā)工具。
//delphi德爾斐[?d?lfi]
}
}}
//mianBanClass面板類
class mianBanClass extends JPanel{
@Override
//graphics圖形,在Java中是所有圖形上下文的抽象基類
//paint描繪
public void paint(Graphics g){
super.paint(g) ;
//draw繪制
g.drawImage (img,firstWeiYi, 50,this) ;
//g .drawImage (img,firstWeiYi,150,this) ;
//g. drawImage (img, firstWeiYi,249,this) ;
//g.drawImage (img,firstWeiYi,350,this) ;
}}}




實例二:點擊開始按鈕后多圖片會跑動,跑步幅度不同(簡易版)




package xianChengLiZiShenJI;
public class mains {
public static void main(String[] args) {
new swingXianCheng();
}
}


package xianChengLiZiShenJI;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class swingXianCheng extends JFrame {
mianBanClass mianBan=new mianBanClass();
JButton startAnNiu=new JButton("開始") ;
//int x=30;
int[] weiYiShuZu={50,50,50,50};
Image img=Toolkit. getDefaultToolkit().
createImage("imgRun\\gif.gif");
public swingXianCheng() {
startAnNiu.addActionListener (new ActionListener(){
@Override
public void actionPerformed (ActionEvent e) {
new MyThread().start() ;
//start()可以用以啟動線程
//start開始
}
}) ;
mianBan. add(startAnNiu) ;
add(mianBan) ;
setSize(900,600) ;
setLocation(200,100) ;
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE) ;
setVisible(true) ;}
class MyThread extends Thread{
// suiJiShu隨機數(shù)
Random suiJiShu=new Random() ;
@Override
public void run() {
// while (x<=800) {
while (true) {
try {
Thread.sleep(100) ;
//線程休眠(暫停占用CPU)100毫秒? 主要是用于自己的軟件設置的時間問題,
//這個軟件設置不能大于2000.
//Thread sleep()休眠就是讓線程進入休眠狀態(tài)TIMED_WAITING,
//sleep("毫秒數(shù)"),當休眠時間到了之后繼續(xù)線程。
//一條線程指的是進程中一個單一順序的控制流,一個進程中可以并行多個線程,
//每條線程并行執(zhí)行不同的任務。
}?
//捕捉異常
catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace() ;}
for(int i=0;i<weiYiShuZu. length; i++) {
weiYiShuZu[i]+=10+suiJiShu.nextInt (20);
//如果num=10+ran.nextInt (20),那么10<=num<10+20
//int[] a=new int[rand.nextint(20)+1];?
//整數(shù)范圍是[0,20)
//Java nextInt()函數(shù) nextInt(int num) 能接受一個整數(shù)作為它所產(chǎn)生的隨機整數(shù)的上限,
//下限為零,比如: nextInt(4)將產(chǎn)生0,1,2,3這4個數(shù)字中的任何一個數(shù)字,注意這里不是0-4,而是0-3。
//但下限總是零,不能更改,所以若要達到非零下限的效果,
//必須把上限減去下限的結果傳給 nextInt( ),然后把下限加入 nextInt( ) 返回的整數(shù)。
}
mianBan.repaint() ;
}
}}
class mianBanClass extends JPanel{
@Override
public void paint(Graphics g){
super .paint(g) ;
g.drawImage (img,weiYiShuZu[0], 50,this) ;
g .drawImage (img,weiYiShuZu[1],150,this) ;
g. drawImage (img,weiYiShuZu[2],249,this) ;
g.drawImage (img, weiYiShuZu[3],350,this) ;
}}}




實例三:設置圖片背景和大小,無切換,點擊按鈕后跑動。




package myGameWuQieHuan;
public class mains {
public static void main(String[] args) {
new GameJFrameClass();
}
}


package myGameWuQieHuan;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GameJFrameClass extends JFrame {
class GamePanelClass extends JPanel {
public void paint(Graphics g) {
super.paint(g);
//beiJingTuPianShuZu背景圖片數(shù)組
for (int i = 0; i < beiJingTuPianShuZu.length; i++) {
g.drawImage(beiJingTuPianShuZu[i], 0,
(getHeight() * i) / 4, getWidth(),
getHeight() / 4, this);
g.drawImage(imgRun[i], firstWeiYi[i],
(getHeight() * i) / 4 + 30,
getWidth()/8, getHeight() / 5, this);
}}
}
public static void main(String[] args) {
new GameJFrameClass();
}
Image[] beiJingTuPianShuZu = new Image[4];
Image[] imgRun = new Image[4];
GamePanelClass gamePanel = new GamePanelClass();
JPanel controlPanel = new JPanel();
JButton startButton = new JButton("開始");
int[] firstWeiYi = new int[4];
public GameJFrameClass() {
for (int i = 0; i < beiJingTuPianShuZu.length; i++) {
beiJingTuPianShuZu[i] = Toolkit.
getDefaultToolkit().createImage(
"imgBack\\" + (i+1) + ".jpg");
imgRun[i] = Toolkit.getDefaultToolkit().createImage(
"imgRun\\gif" + (i+1 ) + ".gif");
}
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new ThreadClass().start() ;
}
});
controlPanel.add(startButton);
controlPanel.setBorder(BorderFactory.
createTitledBorder("游戲控制器"));
add(gamePanel, BorderLayout.CENTER);
add(controlPanel, BorderLayout.SOUTH);
setTitle("賽馬游戲");
setSize(1100, 600);
setLocation(150, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class ThreadClass extends Thread{
Random ran=new Random() ;
@Override
public void run() {
while (true) {
try {
Thread.sleep(100) ;
}?
catch (InterruptedException e) {
e.printStackTrace() ;}
for(int i=0;i<firstWeiYi. length; i++) {
firstWeiYi[i]+=10+ran.nextInt (20);
}
//gamePanel.repaint() ;這句代碼可有可無
//repaint 重繪此組件
//paintComponent()方法繪圖后, 在需要重新
//繪制圖形時,必須通過相應的事件來調
//用repaint()方法。
}
}}
}



