为什么我的矩形在我的 JFrame 中不移动?
Why isn't my rectangle moving in my JFrame?
我正在向我的朋友展示如何在 JFrame 中四处移动矩形,但现在我无法让它工作。难道我做错了什么?这是我的代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
@SuppressWarnings ("serial")
public class TestClass extends JComponent implements KeyListener
{
public static TestClass testClass = new TestClass();
public int x = 250;
public static void main (String[] args)
{
JFrame frame = new JFrame ("Test Frame");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setSize (600, 400);
frame.setResizable (false);
frame.getContentPane().setBackground (Color.WHITE);
frame.getContentPane().add (testClass);
frame.getContentPane().addKeyListener (testClass);
frame.setVisible (true);
}
public void paintComponent (Graphics graphics)
{
super.paintComponent (graphics);
graphics.setColor (Color.BLACK);
graphics.fillRect (x, 150, 100, 100);
}
public void keyPressed (KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK_LEFT)
{
x -= 10;
repaint();
}
if (event.getKeyCode() == KeyEvent.VK_RIGHT)
{
x += 10;
repaint();
}
}
public void keyReleased (KeyEvent event) {}
public void keyTyped (KeyEvent event) {}
}
我以前做过很多次;这很简单。我查看了我的代码一堆,但在这里看不到任何错误。我可能错过了一些愚蠢的东西。有帮助吗?
此外,我知道键绑定更好。该程序仅用于演示目的。
这可能是 KeyListener
和框架内容窗格的可聚焦性问题。
这就是为什么您不应该使用 KeyListener
而应该使用键绑定 API 的原因。
有关详细信息,请参阅 How to Use Key Bindings
我测试了你的代码,似乎是监听器分配的问题;添加这一行,你就可以开始了:
frame.addKeyListener(testClass);
我正在向我的朋友展示如何在 JFrame 中四处移动矩形,但现在我无法让它工作。难道我做错了什么?这是我的代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
@SuppressWarnings ("serial")
public class TestClass extends JComponent implements KeyListener
{
public static TestClass testClass = new TestClass();
public int x = 250;
public static void main (String[] args)
{
JFrame frame = new JFrame ("Test Frame");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setSize (600, 400);
frame.setResizable (false);
frame.getContentPane().setBackground (Color.WHITE);
frame.getContentPane().add (testClass);
frame.getContentPane().addKeyListener (testClass);
frame.setVisible (true);
}
public void paintComponent (Graphics graphics)
{
super.paintComponent (graphics);
graphics.setColor (Color.BLACK);
graphics.fillRect (x, 150, 100, 100);
}
public void keyPressed (KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK_LEFT)
{
x -= 10;
repaint();
}
if (event.getKeyCode() == KeyEvent.VK_RIGHT)
{
x += 10;
repaint();
}
}
public void keyReleased (KeyEvent event) {}
public void keyTyped (KeyEvent event) {}
}
我以前做过很多次;这很简单。我查看了我的代码一堆,但在这里看不到任何错误。我可能错过了一些愚蠢的东西。有帮助吗?
此外,我知道键绑定更好。该程序仅用于演示目的。
这可能是 KeyListener
和框架内容窗格的可聚焦性问题。
这就是为什么您不应该使用 KeyListener
而应该使用键绑定 API 的原因。
有关详细信息,请参阅 How to Use Key Bindings
我测试了你的代码,似乎是监听器分配的问题;添加这一行,你就可以开始了:
frame.addKeyListener(testClass);