ImageIcon不适用于Java中的JButton Java和密钥窄事件

ImageIcon不适用于Java中的JButton Java和密钥窄事件,java,swing,icons,embedded-resource,Java,Swing,Icons,Embedded Resource,我编写了一个方法将图标应用于JButton,但它不适用。在使用ToolKit到getImage()之后,我创建了JButton数组。之后,我使用ImageIcon将新的Image应用到我的按钮中,但我的游戏有问题;启动时不显示图像图标 package mypack; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class puzzleGame

我编写了一个方法将图标应用于
JButton
,但它不适用。在使用
ToolKit
getImage()
之后,我创建了
JButton
数组。之后,我使用
ImageIcon
将新的
Imag
e应用到我的按钮中,但我的游戏有问题;启动时不显示
图像图标

package mypack;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class puzzleGame {

    private JFrame jf;
    private JPanel jpnlButton, jpnlPicture, jpnlMenu;
    private JButton [][] jbt = new JButton[3][3];
    private JLabel textSample, sample, time, move;
    private int numTime = 0, numMove = 0;
    GridLayout glButton = new GridLayout(3,3);
    GridLayout glMenu = new GridLayout(5,1);
    GridLayout glPicture = new GridLayout(1,1);
    Font font  = new Font(null, Font.BOLD, 20);
    private JButton newgame, exit, music;

    // Images
    String[] urlImages = new String[]{ // link url images in my game
        "images/1.jpg",
        "images/2.jpg",
        "images/3.jpg",
        "images/4.jpg",
        "images/5.jpg",
        "images/6.jpg",
        "images/7.jpg",
        "images/8.jpg",
        "images/9.jpg"  
    };

    public puzzleGame(){
        createMyGUI();
    }

    private void createMyGUI() {
        jf = new JFrame("Picture Puzzle Game");
        jf.setSize(700, 500);
        jf.setLocation(300, 100);
        jf.setResizable(false);
        jf.setLayout(null);

        // lam viec voi panel Button 
        jpnlButton = new JPanel();
        jpnlButton.setSize(450, 450);
        jpnlButton.setLocation(10, 10);
        jpnlButton.setLayout(glButton);
        for(int i=0; i<3; i++)
            for(int j=0; j<3; j++)
            {
                jbt[i][j] = new JButton();
                jpnlButton.add(jbt[i][j]);
            }
        for(int i= 0; i<3; i++)
            for(int j=0; j<3; j++)
                readImages(jbt[i][j]);


        // Label nam ke Panel Picture 
        textSample = new JLabel("Sample Picture");
        textSample.setSize(200,50);
        textSample.setFont(font);
        textSample.setLocation(510,10);

        // lam viec void panel Picture
        jpnlPicture = new JPanel();
        jpnlPicture.setSize(250,250);
        jpnlPicture.setLocation(480, 30);
        jpnlPicture.setLayout(glPicture);
        sample = new JLabel();
        sample.setFont(font);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image im = toolkit.getImage("images/game.jpg");
        Image pic = im.getScaledInstance(200, 200, Image.SCALE_DEFAULT);
        ImageIcon ic = new ImageIcon(pic);  
        sample.setIcon(ic);
        jpnlPicture.add(sample);

        // lam viec voi Panel Menu 
        jpnlMenu = new JPanel();
        jpnlMenu.setSize(200,180);
        jpnlMenu.setLocation(480, 270);
        jpnlMenu.setLayout(glMenu);
        newgame = new JButton("New Game");
        exit = new JButton("Exit");
        music = new JButton("Music");
        move = new JLabel("Move: " + numMove);
        time = new JLabel("Time: " + numTime);
        move.setFont(font);
        move.setHorizontalAlignment(SwingConstants.CENTER);
        time.setFont(font);
        time.setHorizontalAlignment(SwingConstants.CENTER);
        jpnlMenu.add(move);
        jpnlMenu.add(time);
        jpnlMenu.add(newgame);
        jpnlMenu.add(music);
        jpnlMenu.add(exit);

        jf.add(textSample);
        jf.add(jpnlButton);
        jf.add(jpnlPicture);
        jf.add(jpnlMenu);
        jf.setVisible(true);
    }

    private int randomURL() // random images
    {
        Random rd = new Random();
        int max = 8, min = 0;
        int num = rd.nextInt((max-min)+1)+min;
        return num;
    }

    private void readImages(JButton bt){
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image im = toolkit.getImage(urlImages[randomURL()]);
        Image pic = im.getScaledInstance(150, 150, Image.SCALE_DEFAULT);
        ImageIcon ic = new ImageIcon(pic);
        //ImageIcon ic = new ImageIcon(urlImages[randomURL()]);
        bt.setIcon(ic); // apply image but it's not working 
    }

    public static void main(String [] args)
    {
        puzzleGame pu = new puzzleGame();
    }
}
包mypack;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.Random;
公开课益智游戏{
私有jf框架;
私有JPanel JPNL按钮、jpnlPicture、jpnlMenu;
私有JButton[][]jbt=新JButton[3][3];
私人JLabel textSample,sample,time,move;
私有int numTime=0,numMove=0;
GridLayout glButton=新的GridLayout(3,3);
GridLayout glMenu=新的GridLayout(5,1);
GridLayout glPicture=新的GridLayout(1,1);
Font Font=新字体(空,Font.BOLD,20);
私人JButton新游戏、退出、音乐;
//图像
String[]urlImages=新字符串[]{//链接游戏中的url图像
“images/1.jpg”,
“images/2.jpg”,
“images/3.jpg”,
“images/4.jpg”,
“images/5.jpg”,
“images/6.jpg”,
“images/7.jpg”,
“images/8.jpg”,
“images/9.jpg”
};
公众益智游戏(){
createMyGUI();
}
私有void createMyGUI(){
jf=新的JFrame(“拼图游戏”);
jf.设置大小(700500);
设置位置(300100);
jf.可设置大小(false);
jf.setLayout(空);
//lam viec voi面板按钮
jpnlButton=新的JPanel();
jpnlButton.setSize(450450);
jpnlButton.setLocation(10,10);
jpnlButton.setLayout(glButton);

对于(int i=0;i@nIcE cow感谢您的帮助。我正在尝试
Image im=toolkit.getImage(“images/game.jpg”);
这是一个明显的问题。JRE没有尝试将资源作为嵌入式资源加载(只能通过
URL
访问),但作为一个
文件
@mKorbel链接了一个问题,该问题以正确的方式获取URL。在中也提到了它。