永发信息网

有关Java实现图形移动的一个小问题

答案:4  悬赏:40  手机版
解决时间 2021-04-06 17:45
  • 提问者网友:骑士
  • 2021-04-05 17:43
在学Java游戏开发的基础。写了两个类,想要实现监听键盘输入,图形在JFrame上移动。但是不知道为什么总是不动。。。请各位高人指导一下。。感谢各位!

我在想是不是repaint或者ActionListener出了问题?

这是主类:

import javax.swing.JFrame;

public class Frame extends JFrame{

public Frame(){
this.setSize(500,500);
this.add(new Board());

this.addKeyListener(new Board());
this.setVisible(true);

}
public static void main(String[] args) {
new Frame();

}

}

这是第JPanel类:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;

public class Board extends JPanel implements KeyListener{

int x, y,dx,dy;

public Board(){

this.addKeyListener(this);
}
public void paint(Graphics g){

super.paint(g);
this.setBackground(Color.BLACK);
g.setColor(Color.WHITE);
g.fillRect(x+dx,y+dy,50,50);
}

public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_LEFT){
dx--;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
dx++;
}
if(e.getKeyCode()==KeyEvent.VK_UP){
dy--;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
dy++;
}
repaint();

}

public void keyReleased(KeyEvent e){

}
public void keyTyped(KeyEvent e){

}

}

this.add(new Board());
可是这里我已经写上了add new Board()啊。
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-04-05 19:22
Frame 中没有添加 Board这个Panel
全部回答
  • 1楼网友:北城痞子
  • 2021-04-05 22:30
import javax.swing.JFrame; public class Frame extends JFrame{ public Frame(){ this.setSize(500,500); //这句是添加上去的 Board b = new Board(); this.add(b); this.addKeyListener(b); //你需要的只是一个画板,你每次都new一个,你现在有2个独立的画板了 //this.add(new Board()); //this.addKeyListener(new Board()); this.setVisible(true); } public static void main(String[] args) { new Frame(); } }
  • 2楼网友:污到你湿
  • 2021-04-05 20:53
LZ问题出在这两句上: this.add(new Board()); this.addKeyListener(new Board()); 你上面是作用在两个不同的对象上,所以不能显示. 应改为: import javax.swing.JFrame; public class Frame extends JFrame{ Board board; //添加 public Frame(){ board = new Board();//添加 this.setSize(500,500); this.add(board);//改正 this.addKeyListener(board);//改正 this.setVisible(true); } public static void main(String[] args) { new Frame(); } }
  • 3楼网友:行雁书
  • 2021-04-05 20:22
import java.sql.*; public class l { public static void main(string[] args) { string sql; connection conn; statement stmt; resultset rs; try { class.forname("com.microsoft.jdbc.sqlserver.sqlserverdriver").newinstance(); string url="jdbc:microsoft:sqlserver://数据库地址:数据库端口;databasename=数据库名"; string user="数据库连接名"; string password="数据库连接密码"; conn= drivermanager.getconnection(url,user,password); stmt=conn.createstatement(); sql="要执行的sql语句"; rs=stmt.executequery(sql); while(rs.next()) { system.out.println(rs.getstring(1)); system.out.println(rs.getstring(2)); } rs.close(); stmt.close(); conn.close(); } catch(exception e) { e.printstacktrace(); } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯