gpt4 book ai didi

java - 将图像添加到 JFrame 时出现问题

转载 作者:行者123 更新时间:2023-12-01 17:24:48 26 4
gpt4 key购买 nike

我一直在尝试将图像图标加载到 jframe 中。我不知道为什么这段代码不起作用。我尝试过使用 jpanels 和 jlabels,以及其他加载图像的方法,但这些也不起作用。我认为这与我设置的 JFrame 有关。我想远离 jpanels 和 jlabels,因为至少就我所知,它们无法缩放。如果有人有添加图像的解决方案,请告诉我。这是代码:

import java.awt.Canvas;
import javax.swing.JFrame;
import java.awt.*;
import javax.swing.ImageIcon;
import java.awt.event.KeyEvent;
import java.awt.Graphics;


public class Base extends Canvas implements Runnable {

private static final long serialVersionUID = 001;
private Image rock1;
private Image rock2;
private Image wood1;

private Thread thread;
private boolean running = (false);
private boolean paused = (false);

int x = 0;
int y = 0;
int z = 512;


private void start() {
if (running)
return;
running = true;
thread = new Thread(this);
}

public void run(){}

public Base(){}

public static void main(String[] Args) {
Base game = new Base();
JFrame frame = new JFrame();
frame.add(game);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
frame.setTitle("Game");

System.out.println("Running...");

game.start();
game.loadPics();

}

public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_A) {
x = x - 5;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
x = x + 5;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
y = y - 5;
}
if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
y = y + 5;
}
if (e.getKeyCode() == KeyEvent.VK_W) {
z = z + 5;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
z = z - 5;
}
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
paused = (true);
}
}

public void loadPics(){

rock1 = new ImageIcon("C\\...\\rock1.png").getImage();
rock2 = new ImageIcon("C\\...\\rock2.png").getImage();
wood1 = new ImageIcon("C\\....\\wood1.png").getImage();

repaint();
}

public void paint(Graphics g){
while(paused = false){
g.drawImage(rock1, x, y, z, z, this);
g.drawImage(rock2, x + 512, y, z, z, this);
g.drawImage(wood1, x, y + 512, z, z, this);

try{
Thread.sleep(16);
}catch(Exception e){}
g.dispose();
}

}
}

我再次认为问题出在我的 JFrame 上,但我不能太确定,因为我不是最有经验的 java 程序员。无论如何,如果您知道解决方案或需要更改的内容,请提供帮助。

最佳答案

本声明

while (paused = false){
当您使用赋值表达式时,

将始终计算为false,因此不会发生对drawImage的后续调用。您可能打算使用 == 运算符来比较原始 boolean 值:

while (paused == false){
  • 不要使用 paint,使用子类 JComponent 中的 paintComponent
  • 不要在任何 paint 方法中调用Thread.sleep。 Swing有自己的concurrency mechanisms 。您可以使用Swing Timer,而不是在此处调用Thread.sleep定期执行图形更新。

除此之外,AWT 是重量级组件,不能用轻量级 Swing 组件很好地呈现。使用Key Bindings而不是 Swing 应用程序的Key Listeners

关于java - 将图像添加到 JFrame 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15865591/

26 4 0
文章推荐: java - 日期不进行比较
文章推荐: java - 如何按2个约束排序?
文章推荐: javascript - 如何修改 Material-UI