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()休眠就是让线程进入休眠状态TIMED_WAITING,
//sleep("毫秒数"),当休眠时间到了之后继续线程。
//一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,
//每条线程并行执行不同的任务。
}
//捕捉异常
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace() ;}
firstWeiYi+=15;
mianBan.repaint() ;
//repaint 重绘此组件
//paintComponent()方法绘图后, 在需要重新
//绘制图形时,必须通过相应的事件来调
//用repaint()方法。
//component 组成部分,C++ Builder中叫组件,Delphi中叫部件,
//(简而言之,组件就是对象。)
//C++Builder是由Borland公司推出的一款可视化集成开发工具。
//Delphi,是Windows平台下著名的快速应用程序开发工具。
//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随机数
Random suiJiShu=new Random() ;
@Override
public void run() {
// while (x<=800) {
while (true) {
try {
Thread.sleep(100) ;
//线程休眠(暂停占用CPU)100毫秒 主要是用于自己的软件设置的时间问题,
//这个软件设置不能大于2000.
//Thread sleep()休眠就是让线程进入休眠状态TIMED_WAITING,
//sleep("毫秒数"),当休眠时间到了之后继续线程。
//一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,
//每条线程并行执行不同的任务。
}
//捕捉异常
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];
//整数范围是[0,20)
//Java nextInt()函数 nextInt(int num) 能接受一个整数作为它所产生的随机整数的上限,
//下限为零,比如: nextInt(4)将产生0,1,2,3这4个数字中的任何一个数字,注意这里不是0-4,而是0-3。
//但下限总是零,不能更改,所以若要达到非零下限的效果,
//必须把上限减去下限的结果传给 nextInt( ),然后把下限加入 nextInt( ) 返回的整数。
}
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背景图片数组
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()方法。
}
}}
}



