鼠标点击java
我学习了用java创建迷宫游戏的教程。完成后,我决定添加一些东西(主菜单、更多关卡等)。我目前被困在主菜单,因为我无法让鼠标输入工作。当我在“开始游戏”框中单击鼠标左键时,我正试图切换到screen=1。这是我当前的类代码鼠标点击java,java,swing,paint,keylistener,mouselistener,Java,Swing,Paint,Keylistener,Mouselistener,我学习了用java创建迷宫游戏的教程。完成后,我决定添加一些东西(主菜单、更多关卡等)。我目前被困在主菜单,因为我无法让鼠标输入工作。当我在“开始游戏”框中单击鼠标左键时,我正试图切换到screen=1。这是我当前的类代码 package Maze; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.Act
package Maze;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class Board extends JPanel implements ActionListener{
private Timer timer;
private Map m;
private Player p;
private int screen = 0;
private String Message = "";
private Font font = new Font("Serif", Font.BOLD, 48);
private Font start = new Font("Serif", Font.BOLD, 36);
private Rectangle start2 = new Rectangle(135,350,180,55);
public Board(){
m = new Map();
p = new Player();
addKeyListener(new Al());
addMouseListener(new A2());
setFocusable(true);
timer = new Timer(25,this);
timer.start();
}
public void actionPerformed(ActionEvent e){
if(m.getMap(p.getTileX(),p.getTileY()).equals("f")){
Message = "Winner";
screen = 10;
}
repaint();
}
public void paint(Graphics g){
super.paint(g);
if(screen==0){
g.setColor(Color.BLACK);
g.fillRect(0, 0, 464, 485);
g.setColor(Color.RED);
g.setFont(font);
g.drawString("Maze Game", 100,50);
g.setFont(start);
g.setColor(Color.WHITE);
g.drawString("Created by: ", 135,90);
g.drawString("Chad Jordan", 125,130);
g.setColor(Color.PINK);
g.fillRect(start2.x, start2.y, start2.width, start2.height);
g.setColor(Color.WHITE);
g.drawString("Start Game", start2.x, start2.y+40);
}
if((screen==1)){
for(int y = 0; y<14;y++){
for(int x=0; x<14; x++){
if(m.getMap(x, y).equals("g")){
g.drawImage(m.getGrass(), x*32, y*32, null);
}
if(m.getMap(x, y).equals("w")){
g.drawImage(m.getWall(), x*32, y*32, null);
}
if(m.getMap(x,y).equals("f")){
g.drawImage(m.getFinish(), x*32, y*32, null);
}
}
}
g.drawImage(p.getPlayer(), p.getTileX()*32, p.getTileY()*32, null);
}
if(screen==10){
g.setColor(Color.BLACK);
g.setFont(font);
g.drawString(Message, 150,200);
}
}
public class A2 extends MouseAdapter{
public void MousePressed(MouseEvent e){
int mx = e.getX();
int my = e.getY();
System.out.println("2");
if((screen ==0) && start2.contains(mx,my)){
screen=1;
System.out.println("1");
}
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
public class Al extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keycode = e.getKeyCode();
if(( keycode == KeyEvent.VK_W) || (keycode == KeyEvent.VK_UP)){
if(!m.getMap(p.getTileX(),p.getTileY() -1).equals("w")){
p.move(0, -1);
}
}
if(( keycode == KeyEvent.VK_A) || (keycode == KeyEvent.VK_LEFT)){
if(!m.getMap(p.getTileX()-1,p.getTileY()).equals("w")){
p.move(-1, 0);
}
}
if(( keycode == KeyEvent.VK_D) || (keycode == KeyEvent.VK_RIGHT)){
if(!m.getMap(p.getTileX()+1,p.getTileY()).equals("w")){
p.move(1, 0);
}
}
if(( keycode == KeyEvent.VK_S) || (keycode == KeyEvent.VK_DOWN)){
if(!m.getMap(p.getTileX(),p.getTileY() +1).equals("w")){
p.move(0, 1);
}
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
}
}
package迷宫;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.Rectangle;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.Timer;
公共类板扩展JPanel实现ActionListener{
私人定时器;
私有地图m;
私人玩家p;
私有int屏幕=0;
私有字符串消息=”;
私有字体字体=新字体(“衬线”,Font.BOLD,48);
私有字体开始=新字体(“衬线”,Font.BOLD,36);
私有矩形start2=新矩形(135350180,55);
公共委员会(){
m=新映射();
p=新玩家();
addKeyListener(新Al());
addMouseListener(新A2());
设置聚焦(真);
定时器=新定时器(25,此);
timer.start();
}
已执行的公共无效操作(操作事件e){
if(m.getMap(p.getTileX(),p.getTileY()).equals(“f”)){
Message=“Winner”;
屏幕=10;
}
重新油漆();
}
公共空间涂料(图g){
超级油漆(g);
如果(屏幕==0){
g、 设置颜色(颜色为黑色);
g、 fillRect(0,046485);
g、 setColor(Color.RED);
g、 setFont(字体);
g、 抽绳(“迷宫游戏”,100,50);
g、 setFont(开始);
g、 setColor(Color.WHITE);
g、 抽绳(“创建人:”,135,90);
g、 抽绳(“乍得-约旦”,125130);
g、 setColor(颜色为粉红色);
g、 fillRect(start2.x,start2.y,start2.width,start2.height);
g、 setColor(Color.WHITE);
g、 抽绳(“开始游戏”,开始2.x,开始2.y+40);
}
如果((屏幕==1)){
对于(int y=0;y,从我看到的情况来看,您的问题是大写的
你已经用大写字母M实现了MousePressed
public void MousePressed(MouseEvent e){
int mx = e.getX();
int my = e.getY();
System.out.println("2");
if((screen ==0) && start2.contains(mx,my)){
screen=1;
System.out.println("1");
}
}
还有小写字母m:
public void mousePressed(MouseEvent e) {
}
只需将大写字母M改为小写字母M,并删除多余的鼠标按下的调用
e、 g
您遇到的主要问题是,您的鼠标按下方法命名不正确
改变
public void MousePressed(MouseEvent e)
到
我建议您使用@Override
注释,如果您犯了这个错误,它将导致编译器错误
我还鼓励在KeyListener上使用键绑定API,在paint上使用paintComponent
在您更改屏幕变量后,您可能还会发现一个重新绘制的调用,当您将System.out.println(“1”);
放在if语句之外时,该变量将更新屏幕,但它仍然不打印?另外,为什么要打印?只需放一个断点并进行调试?(即使不使用IDE,您也可以这样做,尽管这样做会有所帮助…)谢谢,这就是问题所在。我已经为此工作了几个小时>是的。还有+1,因为我提到了@Override
public void MousePressed(MouseEvent e)
public void mousePressed(MouseEvent e)