【发布时间】:2014-04-03 17:09:06
【问题描述】:
我已经搜索了几个标题与此类似的问题(例如how to use jpanel with paint (or repaint)),但我找不到我的代码不起作用的原因。我是 JPanels 的新手,所以我对这类事情的第一次尝试是制作一个可以用箭头键移动的三角形。我把三角形画得很好,没有问题。但是,当我尝试用箭头移动三角形时,它没有移动。谁能找到为什么它不会重绘?
JPanel 代码(我也有一个单独的 JFrame 本身的类,它只制作框架并添加面板,如果你需要看到告诉我,我会编辑它):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Drawpanel extends JPanel implements KeyListener{
int[] xcoords = {-20,0,20};//Triangle x coordinates
int[] ycoords = {20,-20,20};//Triangle y coordinates
int x = 100;//X coordinate for drawing the triangle
int y = 100;//Y coordinate for drawing the triangle
Graphics2D g2d;
Polygon tri = new Polygon(xcoords,ycoords,xcoords.length);//triangle
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d = (Graphics2D)g;
g2d.translate(x,y);//draw triangle at x and y coordinates
g2d.setColor(new Color(234,22,72));
g2d.fill(tri);
}
public void keyTyped(KeyEvent k){}
public void keyReleased(KeyEvent k){}
public void keyPressed(KeyEvent k)
{
int keycode = k.getKeyCode();
switch(keycode)
{
case KeyEvent.VK_DOWN://if down arrow pressed, decrease ship y coordinate by 10
y -= 10;
case KeyEvent.VK_UP:
y += 10;
case KeyEvent.VK_LEFT:
x -= 10;
case KeyEvent.VK_RIGHT:
x += 10;
}
repaint();//screen doesn't repaint
}
}
【问题讨论】:
-
正如@camickr 建议的那样,查看here 了解如何用键绑定替换键侦听器。
标签: java swing paintcomponent graphics2d repaint