看了马士兵老师的坦克大战java程序,想按照自己的思路动手编一下 , 结果界面背景设置不了,java 作图 不一定要继承JFrame或者Frame坦克java代码,但是所有的组件必须放到顶层容器坦克java代码 , Java Swing 有三种顶层容器
JFrame:用来设计类似于Windows系统中的窗口形式的应用程序 。
·JDialog:和JFrame类似 , 只不过JDialog是用来设计对话框 。
·JApplet:用来设计可以在嵌入在网页中的Java小程序 。
而且坦克java代码你的代码 Kosese001既然继承了JFrame那么坦克java代码他的构造就是个JFrame,你下面又new JFrame("坦克大战");这样何必继承 , 直接在构造里面实现操作就可以把Kosese001中 ,
你的背景色没有显示出来,是由于JFrame 是顶层容器 , 它默认的布局会设置它的背景色,除非你在前面 加上 jfrmMain.setLayout(null);使得布局变成空布局 , 下面的jfrmMain.getContentPane().setBackground(Color.green);才会生效,或者你可以通过设置JFrame上组件的背景色来完成同样的效果比如 mypaint = new MyPaint();
mypaint.setBackground(Color.green); 还有啥不懂的 可以问坦克java代码我 。
JAVA坦克大战,这段代码为什么子弹的坐标在变,却不能repaint,但是按下任意键盘的建却重绘了呢?Mypanel坦克java代码的run方法里要调用repaint方法否则你坦克java代码的repaint方法只会在keyPressed发生的时候才调用
修改一下两个地方
(1)
// 键盘获取事件的函数
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
if (arg0.getKeyCode() == KeyEvent.VK_J) {
if (hero.shot.size()5) {
hero.shott();
}
}
if (arg0.getKeyCode() == KeyEvent.VK_W) {
hero.setSDC(hero.getSpeed(), 0, hero.getColor());
hero.moveUp();
} else if (arg0.getKeyCode() == KeyEvent.VK_S) {
hero.setSDC(hero.getSpeed(), 1, hero.getColor());
hero.moveDown();
} else if (arg0.getKeyCode() == KeyEvent.VK_A) {
hero.setSDC(hero.getSpeed(), 2, hero.getColor());
hero.moveLeft();
} else if (arg0.getKeyCode() == KeyEvent.VK_D) {
hero.setSDC(hero.getSpeed(), 3, hero.getColor());
hero.moveRight();
}
/**
* 这个repaint注释掉
*/
//this.repaint();
}
(2)
// 线程
/**
* 一秒钟60帧
*/
public void run() {
// TODO Auto-generated method stub
while(true){
this.repaint();
try {
Thread.sleep(1000 / 60);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
完整代码如下:
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class aaa extends JFrame {
public static void main(String[] args) {
aaa a1 = new aaa();
Thread t1 = new Thread(a1.mp);
t1.start();
}
MyPanel mp = null;
public aaa() {
mp = new MyPanel();
this.add(mp);
this.addKeyListener(mp);
this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyPanel extends JPanel implements KeyListener, Runnable {
MyTank hero = null;
VectorEmenyTank emeny = new VectorEmenyTank();
int emsize = 5;
// 键盘获取事件的函数
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
if (arg0.getKeyCode() == KeyEvent.VK_J) {
if (hero.shot.size()5) {
hero.shott();
}
}
if (arg0.getKeyCode() == KeyEvent.VK_W) {
hero.setSDC(hero.getSpeed(), 0, hero.getColor());
hero.moveUp();
} else if (arg0.getKeyCode() == KeyEvent.VK_S) {
推荐阅读
- chatgpt可以赚钱吗,chat币团队
- 苹果cms分类筛选页数,苹果cms首页按最新排序
- 关于postgresql客户端连接数据库失败的信息
- 搭建网盘服务器,建立网盘服务器
- 四则运算代码java 四则运算java编程
- 网易python数据分析师下载,python数据分析网站
- 2020年赛车游戏带链接,2020 赛车游戏
- 手机音频通话怎么收费的,手机语音通话收费标准
- java音乐识别代码 java编写音乐类