0 java swing image embedded-resource imageicon
我一直在尝试将图像加载到jframe中.我不知道为什么这段代码不起作用.我尝试过使用jpanel和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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
同样,我认为问题在于我的JFrame,但我不能太确定,因为我不是最有经验的java程序员.无论如何,如果您知道解决方案或需要更改的内容,请提供帮助.
这个说法
while (paused = false){
Run Code Online (Sandbox Code Playgroud)
将始终评估false为您正在使用赋值表达式,因此drawImage不会发生后续调用.您可能打算使用==运算符来比较原始boolean值:
while (paused == false){
Run Code Online (Sandbox Code Playgroud)
paint,paintComponent从子类使用JComponentThread.sleep用任何 paint方法打电话.Swing有自己的并发机制.Thread.sleep您可以使用Swing Timer定期执行图形更新,而不是在此处调用.除此之外,AWT是重量级组件,使用轻量级Swing组件无法很好地渲染.使用键绑定而不是Key ListenersSwing应用程序.
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |