gpt4 book ai didi

java - 调整大小是重新绘制 JFrame 的唯一方法。重绘();似乎不起作用

转载 作者:行者123 更新时间:2023-12-01 13:00:44 25 4
gpt4 key购买 nike

我目前正在尝试制作我的第一个游戏,但在使 repaint() 方法正常工作时遇到问题。我已经检查了我的 keyListeners 并确认它们工作正常!我创建的船会移动,但前提是我通过拖动侧面来强制调整窗口大小。如果有人有任何提示,我将非常感激!

如果您需要更多信息,请随时询问!

    import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;




public class Main extends Canvas implements KeyListener{

public static Ship playerShip = new Ship(150,450,"F5S4-Recovered.png");

public int numberOfEnemies = 0;





public static void createFrame(){



Window frame1 = new Window();

final JPanel pane = new JPanel(){

public void paintComponent(Graphics g){

super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, 1000, 1000);
g.drawImage(playerShip.image, playerShip.xPos1, playerShip.yPos1, this);

}

};

frame1.add(pane);

}

public void keyTyped(KeyEvent e){System.out.println("KeyTyped");}

public void keyPressed(KeyEvent e){

switch(e.getKeyCode())
{
case KeyEvent.VK_LEFT :
playerShip.xPos1-=2;
break;
case KeyEvent.VK_RIGHT:
playerShip.xPos1+=2;
break;


}


repaint();

}

public void keyReleased(KeyEvent e){}

public static void main(String args[]){

createFrame();

}

}

窗口类-------------------------------------------------------- -------------

    import javax.swing.*;



public class Window extends JFrame{


public Window()
{
setTitle("Space Game");
setSize(800,800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
addKeyListener(new Main());
setVisible(true);

}




}

最佳答案

repaint() 的调用正在重新绘制 Canvas 类,但绘制是在 JPanel Pane 上完成的。调整大小会导致面板自动重新绘制。因此,要解决此问题,您需要 pane.repaint(),但除非您将面板作为类成员,否则您不能这样做,这样您就可以从监听器方法访问它。目前,它的作用域位于 createFrame() 方法的本地范围内。

此外,您可能应该将监听器添加到面板中,甚至不扩展 Canvas,因为您甚至没有使用它

其他注意事项:

  • 考虑使用 Key Bindings而不是低级的 KeyListener

  • Swing 应用程序应从事件调度线程 (EDT) 运行。您只需将 main 中的代码包装在 SwingUtilities.invokeLate(..) 中即可实现此目的。查看更多Initial Threads

  • 再次,我只是添加,不要扩展 Canvas

关于java - 调整大小是重新绘制 JFrame 的唯一方法。重绘();似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531652/

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