java问题求解,急用!

草帽小子_DJ 2013-04-01 11:19:38
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package tanke1;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Tanke1 extends JFrame {//设置按钮
static JButton kaishi=new JButton("开始");
static JButton shezhi=new JButton("设置");
static JButton bangzhu=new JButton("帮助");
static JButton guanyu =new JButton("关于");
static JButton tuichu=new JButton("退出");
static Tanke1 f=new Tanke1();

public static void main(String[] args) {//设置开始页面
f.setTitle("坦克大战");
f.setLayout(null);
f.setSize(800, 526);
f.setLocation(300,100);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
kaishi.setFont(new Font("宋体",50,30));
kaishi.setBounds(130, 100, 100, 50);
shezhi.setFont(new Font("宋体",50,30));
shezhi.setBounds(130, 170, 100, 50);
bangzhu.setFont(new Font("宋体",50,30));
bangzhu.setBounds(130,240,100,50);
guanyu.setFont(new Font("宋体",50,30));
guanyu.setBounds(130,310,100,50);
tuichu.setFont(new Font("宋体",50,30));
tuichu.setBounds(130,380, 100, 50);
f.add(kaishi);
f.add(shezhi);
f.add(bangzhu);
f.add(guanyu);
f.add(tuichu);
kaishi.addMouseListener(new Mykaishi());
shezhi.addMouseListener(new Myshezhi());
bangzhu.addMouseListener(new Mybangzhu());
guanyu.addMouseListener(new Myguanyu());
tuichu.addMouseListener(new Mytuichu());
}

@Override
public void paint(Graphics g){//导入开始页面背景图片
BufferedImage image=null;
try {
image =ImageIO.read(new File("D:/java/Tanke/src/tanke/kaishi.JPG"));
} catch (IOException ex) {
Logger.getLogger(Tanke1.class.getName()).log(Level.SEVERE, null, ex);
}
g.drawImage(image, 0, 0, this);
g.setColor(Color.BLACK);
g.setFont(new Font("宋体",50,50));
g.drawString("坦克大战", 90, 100);
}

static class Mykaishi implements MouseListener{//设置开始按钮响应
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
Game jf=new Game();
jf.game(jf);
f.setVisible(false);
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}

static class Myshezhi implements MouseListener{//设置设置按钮响应
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(shezhi, "Sorry!技术有限无法导入背景音乐!");}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}

static class Mybangzhu implements MouseListener{//设置帮助按钮响应
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(bangzhu, "上:W 下:S 左:A 右:D 子弹:Enter");
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}

static class Myguanyu implements MouseListener{//设置关于按钮响应
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(guanyu,"本游戏由长大软工1202班董进编写");
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}

static class Mytuichu implements MouseListener{//设置退出按钮响应
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
System.exit(0);
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
}


class Game extends JFrame{//创建游戏页面
static int x=0,y=0;
public Game(){
setTitle("坦克大战");
setSize(800,526);
setLayout(null);
setLocation(300,100);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

@Override
public void paint(Graphics g){//导入游戏背景图片
BufferedImage pic=null;
try {
pic=ImageIO.read(new File("D:/java/Tanke/src/tanke/beijing.JPG"));
} catch (IOException ex) {
Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
}
g.drawImage(pic, 0, 0, this);
}

public void game(JFrame j){//制作坦克(坦克为按钮)
JPanel pan=new JPanel();
ImageIcon icw=new ImageIcon("D:/java/Tanke/src/tanke/tanke7上.jpg");
JButton btw=new JButton(icw);
j.setLayout(null);
btw.addKeyListener(new MyKeyListener());
btw.setBounds(500, 300, 30, 36);
btw.setVisible(true);
pan.add(btw);
pan.setLayout(null);
pan.setVisible(true);
j.add(pan);
j.setVisible(true);

}

static class MyKeyListener implements KeyListener{//实现坦克移动
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
JButton but=(JButton)e.getSource();
x=but.getLocation().x;
y=but.getLocation().y;
if(e.getKeyCode()==KeyEvent.VK_W)
{
y=y-5;
if(y<=0)y=0;
}
else if(e.getKeyCode()==KeyEvent.VK_S)
{
y=y+5;
if(y>=460)y=460;
}
else if(e.getKeyCode()==KeyEvent.VK_S)
{
y=y+5;
if(y>=460)y=460;
} else if(e.getKeyCode()==KeyEvent.VK_A)
{
x=x-5;
if(x<=0)x=0;
} else if(e.getKeyCode()==KeyEvent.VK_D)
{
x=x+5;
if(x>=765)x=765;
}
System.out.println("x="+x+" "+"y="+y);
but.setLocation(x,y);
}
@Override
public void keyReleased(KeyEvent e) {}
}
}
这是我写的第一个游戏坦克大战,到遇到的问题让我很头疼,想了几天也没结果,一个问题是开始页面和游戏页面背景和图片不能同时出现,刷新后才能出现,还有坦克不能出现!还有就是坦克移动时会擦去背景!移动时不能转方向!望大神指点,详细一点!感激不尽!!!
...全文
225 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1216164960 2013-04-04
  • 打赏
  • 举报
回复
引用 7 楼 szllong123 的回复:
引用 6 楼 a1216164960 的回复:引用 5 楼 szllong123 的回复:引用 4 楼 a1216164960 的回复:public class Tanke1 extends JFrame implements MouseListener{//设置按钮 JButton kaishi; JButton shezhi; JButton bangzhu; ……
先声明我没有恶意,实际上我倒是觉得他要是真的想给每一个按钮 都新建一个对象监听的话还不如写内部类 省了很多的代码 也不用打包多麻烦啊。还有我那个是所有的按钮都用JFrame的对象监听 相比而言我觉得还行 挺省代码也方便 当然前提是这个监听对象对同一种组件要多次监听
拾薪 2013-04-04
  • 打赏
  • 举报
回复
引用 6 楼 a1216164960 的回复:
引用 5 楼 szllong123 的回复:引用 4 楼 a1216164960 的回复:public class Tanke1 extends JFrame implements MouseListener{//设置按钮 JButton kaishi; JButton shezhi; JButton bangzhu; JButton guanyu; JButt……
对于监听是给你说的,不过我不想写两遍了,所以就写一块了,不好意思啊!
a1216164960 2013-04-04
  • 打赏
  • 举报
回复
引用 5 楼 szllong123 的回复:
引用 4 楼 a1216164960 的回复:public class Tanke1 extends JFrame implements MouseListener{//设置按钮 JButton kaishi; JButton shezhi; JButton bangzhu; JButton guanyu; JButton tuichu; //JPanel j……
恩恩?你是说我吗?
拾薪 2013-04-04
  • 打赏
  • 举报
回复
引用 4 楼 a1216164960 的回复:
public class Tanke1 extends JFrame implements MouseListener{//设置按钮 JButton kaishi; JButton shezhi; JButton bangzhu; JButton guanyu; JButton tuichu; //JPanel jp1,jp2; MyPanel j……
其实最好的做法是把监听事件专门写在一个包里,用哪个就new那个,再有就是不要直接在JFrame上绘图,因为JFrame没有实现双缓冲,而JPanel上实现了的,所以最好把所有东西都放到JPanel中,然后把JPanel放到JFrame中。
wyf176176 2013-04-04
  • 打赏
  • 举报
回复
好复杂啊
Bird_On_the_way 2013-04-01
  • 打赏
  • 举报
回复
f.setVisible(true) 应该在构造完框架后再显示出来
草帽小子_DJ 2013-04-01
  • 打赏
  • 举报
回复
还是不行啊!大哥,能说的详细一点吗?感激不尽!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧