我正在尝试用java显示JPEG图像
我有一个任务,我正在做的地方,我应该实现和设计一个应用程序,发挥一个游戏称为捕捉生物。让该生物出现在一个随机的位置,然后消失并重新出现在其他地方。目标是用鼠标键点击该生物来“捕捉”该生物。记录该生物被捕获的次数 我需要帮助只是显示的生物,这是一个皮卡丘JPEG,我尝试了一些事情,但没有一个工作。感谢您的帮助,谢谢 主要代码:我正在尝试用java显示JPEG图像,java,swing,Java,Swing,我有一个任务,我正在做的地方,我应该实现和设计一个应用程序,发挥一个游戏称为捕捉生物。让该生物出现在一个随机的位置,然后消失并重新出现在其他地方。目标是用鼠标键点击该生物来“捕捉”该生物。记录该生物被捕获的次数 我需要帮助只是显示的生物,这是一个皮卡丘JPEG,我尝试了一些事情,但没有一个工作。感谢您的帮助,谢谢 主要代码: import javax.swing.*; public class Catch_The_Creature { public static void main(S
import javax.swing.*;
public class Catch_The_Creature
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Catch the Creature");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Creature panel = new Creature();
JOptionPane.showMessageDialog(frame, "Catch Pikachu!");
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
生物代码:
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Creature extends JPanel
{
private final int WIDTH = 400, HEIGHT = 300;
private final int DELAY=20, IMAGE_SIZE = 60;
private ImageIcon image;
private int pikachuX, pikachuY;
private int x, y;
private int catchCount=0;
private static Random generator = new Random();
private Timer time;
private ActionListener updater;
private JLabel countLabel;
public Creature()
{
image = new ImageIcon("image/pikachu.jpg");
time = new Timer(DELAY, updater);
addMouseListener ((MouseListener) new MouseClickedListener());
setBackground (Color.green);
setPreferredSize(new Dimension(1900,1000));
time.start();
}
public boolean point(int x, int y)
{
if (x == pikachuX && y == pikachuY)
{
catchCount++;
return true;
}
return false;
}
public int getCatchCount()
{
return catchCount;
}
private class MouseClickedListener extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
point(event.getX(), event.getY());
}
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.drawImage(image.getImage(),WIDTH, HEIGHT, null);
page.drawString("Pikachus Captured: " + catchCount, 10, 35);
setFont(new Font("Arial", Font.BOLD,35));
}
public void actionPerformed(ActionEvent event)
{
time.setDelay(1000);
x += pikachuX;
y += pikachuY;
if (x <= 0 || x >= WIDTH-IMAGE_SIZE)
pikachuX = pikachuX * -1;
if (y <= 0 || y >= HEIGHT-IMAGE_SIZE)
pikachuY = pikachuY * -1;
repaint();
}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0){}
}
import java.awt.*;
导入java.util.Random;
导入javax.swing.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
公共类生物扩展JPanel
{
专用最终整型宽度=400,高度=300;
私有最终整数延迟=20,图像大小=60;
私有图像图标图像;
皮卡丘私人酒店;
私有整数x,y;
私有int catchCount=0;
专用静态随机生成器=新随机();
私人定时器时间;
私有ActionListener更新程序;
私有JLabel计数标签;
公共生物()
{
image=新的图像图标(“image/pikachu.jpg”);
时间=新计时器(延迟、更新程序);
添加MouseListener((MouseListener)新的MouseClickedListener());
挫折背景(颜色:绿色);
设置首选尺寸(新尺寸(19001000));
time.start();
}
公共布尔点(整数x,整数y)
{
如果(x==pikachuX&&y==pikachuY)
{
catchCount++;
返回true;
}
返回false;
}
public int getCatchCount()
{
返回捕获计数;
}
私有类MouseClickedListener扩展了MouseAdapter
{
公共void mouseClicked(MouseEvent事件)
{
点(event.getX(),event.getY());
}
}
公共组件(图形页)
{
super.paintComponent(第页);
page.drawImage(image.getImage(),宽度,高度,null);
第页。拉丝(“捕获的皮卡丘斯:”+catchCount,10,35);
setFont(新字体(“Arial”,字体粗体,35));
}
已执行的公共无效操作(操作事件)
{
设置延迟时间(1000);
x+=pikachuX;
y+=皮卡丘伊;
如果(x=宽度图像大小)
pikachuX=pikachuX*-1;
if(y=高度-图像大小)
皮卡丘伊=皮卡丘伊*-1;
重新油漆();
}
public void mouseEntered(MouseEvent arg0){}
public void mouseExited(MouseEvent arg0){}
public void mousePressed(MouseEvent arg0){}
public void MouseEvent arg0{}
}
看起来您从未将图像图标添加到面板中,也没有告诉它使用paintComponent()
方法进行绘制
第一种解决方案[首选]:将图像图标
添加到面板中。在构造函数中
super.add(image);
确保使用正确的布局(可能是空布局或绝对布局),并更新ImageIcon
本身的坐标,而不仅仅是一些成员变量
第二种解决方案:在paintComponent()
方法中绘制ImageIcon
。这可能是不鼓励的,因为它违反了一般的Swing原则。确保您的图像文件位于正确的目录中。如果您是从netbeans或eclipse运行,那么您的文件结构应该如下所示
ProjectRoot
src
bin
image
pikachu.jpeg
由于您使用的是“image/pikachu.png”
,因此图像过滤器应该是项目根文件夹的子文件夹,因为IDE将首先在那里搜索您的文件路径
编辑:绘制图像。使用BuffereImage代替ImageIcon
try {
BufferedImage image = ImageIO.read("image/pikachu.jpeg");
} catch (Exception ex){
ex.printStackTrace();
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.drawImage(image, x, y, heightYouWant, widthYouWant, this);
page.drawString("Pikachus Captured: " + catchCount, 10, 35);
setFont(new Font("Arial", Font.BOLD,35));
}
我所需要做的就是在构造器中希望图片开始的位置上输入值
public Creature()
{
image = new ImageIcon ("pikachu.png");
time = new Timer(DELAY, updater);
x = 0;
y = 50;
addMouseListener ((MouseListener) new MouseClickedListener());
setBackground (Color.green);
setPreferredSize(new Dimension(1900,1000));
time.start();
}
同时仍使用图像图标并仍在绘制组件中绘制图像
public void paintComponent(Graphics page)
{
super.paintComponent(page);
image.paintIcon (this, page, x, y);
page.drawString("Pikachus Captured: " + catchCount, 10, 35);
setFont(new Font("Arial", Font.BOLD,35));
}
jpeg文件位于哪里?您可能需要使用getClass().getResourceAsStream方法。您是否在编写代码以将图像实际放置在屏幕上时遇到问题,或者图像未加载是一个问题?因为我看不到任何放置图像的代码。我可能只是瞎了眼,我只是把它放在我的下载文件夹里,但当我把它放在程序文件夹里,但在我能做到这一点之前,我只需要把它显示出来,然后我才能看到是否还有其他错误。代码在哪里,你用来在屏幕上加载图像?我用的是page.drawImage(“pikachu.jpg”,x,y,page);但它不工作,所以我应该把图像放在程序文件中?它不会从其他任何地方读取它?如果你想这样做,你需要使用绝对路径。我会把它放在项目文件夹中。我仍然需要一个正确的方式来显示disrvptor告诉我的图片super.add(image);在构造函数中,但它要求将ImageIcon图像更改为元件图像。因此,我仍然停留在如何实际显示image@peeskillet, +1. 但是在这种情况下,最好使用ImageIO.read(file)
和BufferedImage
而不是ImageIcon
;在paintComponent中,但我不会编译。您将使用图形。drawImage(..)
,int,int,java.awt.image.ImageObserver)不编译,因为您是否传递了图像图标
?如果是这样的话,我会鼓励你阅读我发布的链接。drawImage()
方法采用的是图像
,而不是图像图标
。您应该使用page.drawImage(image.getImage(),pikachuX,pikachuY,null)调用它代码>。请记住,这将使用x和y作为左上角进行绘制。我之所以提到这一点,是因为您在方法中通过鼠标点击来检查精确坐标。这意味着仅单击图像左上角的精确像素将被视为捕获。你可能应该建立一个命中区域。我是edi