2014-04-03 35 views
0

我已经搜索了几个类似标题的问题(例如how to use jpanel with paint (or repaint)),但我找不到我的代码不工作的原因。我是JPanels新手的图形,所以我第一次尝试这种事情就是制作一个可以用箭头键移动的三角形。我把三角形画得很好,没有问题。但是,当我试图用箭头移动三角形时,它没有移动。任何人都可以找到它为什么不重绘?JPanel repaint()不起作用

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 
    } 

} 
+0

作为@camickr建议,看看[这里](http://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners)如何替换关键侦听器键绑定。 – user1803551

回答

2

请勿使用KeyListener。 Swing旨在与Key Bindings一起使用。

可能的问题是面板没有焦点并且没有响应KeyEvent。有关更多信息和使用密钥绑定的解决方案,请参阅Motion Using the Keyboard

另一个可能的问题是,您不重写面板的getPreferredSize()方法以返回适当的Dimension,因此大小为0,因此Swing认为没有任何内容需要绘制。

+0

感谢您的建议。我刚刚尝试了一些关键绑定教程,但我对如何使用键绑定感到非常困惑。你能否解释如何使用像component.getInputMap.put()这样的方法来进行向下箭头击键,其中三角形是组件? – imulsion

+0

@imulsion,我给你一个博客的链接,其中有一些复杂的工作示例。 – camickr

+0

博客有工作示例,但不适用于与JComponents相反的图形 – imulsion

相关问题