如何正确使用keylistener? [英] How to properly use keylistener?

查看:55
本文介绍了如何正确使用keylistener?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

出于某种原因,我的代码中的Key Listener不起作用。我想通过按w键在keyPressed方法中运行所有内容。有关如何做到这一点的任何想法?转到标注注释的部分 - 我离开了我的全班,以防它与此有任何关系。如果您需要澄清,请告诉我。谢谢!



Class Grid:



For some reason, the Key Listener in my code doesn't work. I want to run everything in the keyPressed method by pressing the "w" key. Any ideas of how to do this? Go to the section labeled with the comment - I left my entire class in case it had anything to do with this. If you need clarification, let me know. Thanks!

Class Grid:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Grid extends JPanel{

	private int a = 50;
	private int b = 50;
	private Lifeform[][] Life;

	private boolean[][] life = new boolean[a][b];
	private Timer t;
	private JButton reset;
	private JPanel panel;
	Grid(){

		reset = new JButton("Reset");
		reset.addActionListener(new ResetListener());
		Life = new Lifeform[a][b];

		int ypos = 0;
		for(int i = 0; i < Life.length; i++){
			int xpos = 0;
			for(int j = 0; j < Life[0].length; j++){

				Rectangle r = new Lifeform();
				r.setBounds(xpos, ypos, 25, 25);
				Life[i][j] = (Lifeform) r;
				xpos += 25;
			}
			ypos += 25;
		}

		t = new Timer(64, new Movement());




		this.addMouseListener(new mouse());

	}



	public void paintComponent(Graphics g){

		for(Lifeform[] n : Life){
			for(Lifeform lf : n){
				g.setColor(lf.getColor());
				g.fillRect((int)lf.getX(), (int)lf.getY(), (int)lf.getWidth(), (int)lf.getHeight());
			}
		}

		for (int i = 0; i <= 50; i++){
			g.drawLine(0, 25*i, 1500, 25*i);
			g.setColor(Color.black);
		}
		for (int i = 0; i <= 50; i++){
			g.drawLine(25*i, 0, 25*i, 750);
			g.setColor(Color.black);
		}
	}

	class keys implements KeyListener{

		int add = 0;

		public void keyTyped(KeyEvent e) {
                 //what I'm trying to run
			if (e.getKeyChar() == 'w'){
				for(int a = 0; a < Life.length; a++){
					for(int b = 0; b < Life[a].length; b++){
						try{
							if(life[a-1][b-1] == true) add++;
							if(life[a-1][b] == true) add++;
							if(life[a-1][b+1] == true) add++;
							if(life[a][b-1] == true) add++;
							if(life[a][b+1] == true) add++;
							if(life[a+1][b-1] == true) add++;
							if(life[a+1][b] == true) add++;
							if(life[a+1][b+1] == true) add++;
						}
						catch(ArrayIndexOutOfBoundsException i) {}

						repaint();

						if(add == 2 || add == 3){
							Life[a][b].setColor(Color.white);
							life[a][b] = false;
						}

					}
				}
			}
		}	
		public void keyPressed(KeyEvent e) {}
		public void keyReleased(KeyEvent e) {}

	}
	private JFrame createGrid(){
		JPanel panel = new JPanel();
		JFrame frame = new JFrame("Alveolate");
		frame.add(panel, BorderLayout.CENTER);
		frame.add(reset, BorderLayout.SOUTH);
		frame.add(this);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(700,700);
		frame.setVisible(true);	
		return frame;
	}

	public class mouse implements MouseListener{

		public void mouseClicked(MouseEvent e) {
			for(int i = 0; i < Life.length; i++){
				for(int j = 0; j < Life[i].length; j++){
					Lifeform spot = Life[i][j];

					if (spot.contains(e.getPoint())) {
						Color b = Color.blue;
						if( spot.getColor().equals( Color.blue ) ) {
							b = Color.white;
						}
						spot.setColor(b);
					}	
				}
			}

			repaint();
		}


		public void mousePressed(MouseEvent e) {}
		public void mouseReleased(MouseEvent e) {}
		public void mouseEntered(MouseEvent e) {}		
		public void mouseExited(MouseEvent e) {}

	}

	public class Movement implements ActionListener{
		public void actionPerformed ( ActionEvent e ){

			for (int i = 0; i < Life.length; i++){
				for (int j = 0; j < Life[i].length; j++){
					if(Life[i][j].getColor().equals(Color.blue)){
						life[i][j] = true;
					}

					else{
						life[i][j] = false;

					}		
				}
			}
		}		
	}
	private class ResetListener implements ActionListener{
		public void actionPerformed( ActionEvent e ) {
			for(int i = 0; i < Life.length; i++){
				for(int j = 0; j < Life[i].length; j++){
					Lifeform spot = Life[i][j];
					if(spot.getColor().equals( Color.blue ) ){
						spot.setColor(Color.white);
					}
				}	
			}
		}
	}
	public void startTimer(){
		t.start();
	}

	public void stopTimer(){
		t.stop();
	}
	public static void main(String[] args) {

		Grid ABC = new Grid();
		ABC.createGrid();
		ABC.startTimer();

	}
}





我的尝试:



我尝试将keyPressed方法放在这一行:



public class Movement实现ActionListener {



它不起作用。说实话,我现在很迷茫。



What I have tried:

I've tried putting the keyPressed method under this line:

public class Movement implements ActionListener{

It didn't work. To be honest, I'm pretty lost right now.

推荐答案

哦不!对不起,代码格式不正确,就是当我输入时...再次抱歉。
Oh no! I'm sorry the code isn't formatted correctly, it was when I typed it out...Sorry again.


这篇关于如何正确使用keylistener?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆