如何正确使用keylistener? [英] How to properly use 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屋!