gpt4 book ai didi

java - JPanel repaint() 不工作

转载 作者:行者123 更新时间:2023-12-02 05:58:52 26 4
gpt4 key购买 nike

我搜索了几个与此标题相似的问题(例如 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
}

}

最佳答案

不要使用 KeyListener。 Swing 被设计为与按键绑定(bind)一起使用。

可能的问题是面板没有焦点并且不响应按键事件。请参阅Motion Using the Keyboard了解更多信息和使用按键绑定(bind)的解决方案。

另一个可能的问题是,您没有重写面板的 getPreferredSize() 方法来返回适当的 Dimension,因此大小为 0,因此 Swing 认为没有什么可绘制的。

关于java - JPanel repaint() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com