我正在尝试用java显示JPEG图像

我正在尝试用java显示JPEG图像,java,swing,Java,Swing,我有一个任务,我正在做的地方,我应该实现和设计一个应用程序,发挥一个游戏称为捕捉生物。让该生物出现在一个随机的位置,然后消失并重新出现在其他地方。目标是用鼠标键点击该生物来“捕捉”该生物。记录该生物被捕获的次数 我需要帮助只是显示的生物,这是一个皮卡丘JPEG,我尝试了一些事情,但没有一个工作。感谢您的帮助,谢谢 主要代码: import javax.swing.*; public class Catch_The_Creature { public static void main(S

我有一个任务,我正在做的地方,我应该实现和设计一个应用程序,发挥一个游戏称为捕捉生物。让该生物出现在一个随机的位置,然后消失并重新出现在其他地方。目标是用鼠标键点击该生物来“捕捉”该生物。记录该生物被捕获的次数

我需要帮助只是显示的生物,这是一个皮卡丘JPEG,我尝试了一些事情,但没有一个工作。感谢您的帮助,谢谢

主要代码:

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