如何在有问题的Windows中添加图像?

时间:2019-03-07 09:27:40

标签: java image swing

我想用问题和每个问题的独特形象进行测验。例如

enter image description here

我不知道为什么,但是窗口中没有图像。例如,在窗口中没有文件“ Quiz.java”中的图像“ information.jpg”,问题为“荷兰的首都是什么?”。 如何将带有问题的图像放置在窗口中,为每个问题放置唯一的图像?请帮助

当我选择包含有book.jpg,science.jpg,swising.jpg图像的文件夹时:‪‪‪C:\ Users \ syuye \ eclipse-workspace \ test \ src \ test,出现错误消息

enter image description here

所以我将文件另存为utf-8。也许它以某种方式影响了?

对c0der:是的,我添加了 e.printStackTrace();

JLabel picLabel = new JLabel(new ImageIcon(myPicture));

img.add(picLabel); 

add(img); 

} catch (Exception e) {e.printStackTrace();}

发生错误:

javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:42)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:47)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:52)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:57)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:62)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:67)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:72)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:77)
    at test.Quiz.main(Quiz.java:90)
javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at test.RadioQuestion.<init>(RadioQuestion.java:61)
    at test.Quiz.<init>(Quiz.java:82)
    at test.Quiz.main(Quiz.java:90)

Quiz.java文件

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.CardLayout;
import java.util.Random;
import javax.swing.JOptionPane;   
import javax.imageio.*;
import java.io.*;

public class Quiz extends JFrame{
    JPanel p=new JPanel();
    CardLayout cards=new CardLayout();
    int numQs;
    int wrongs=0;
    int total=0;

    String[][] answers={
        {"Enschede","Amsterdam","Den Haag","Berlin"},
        {"Slang for Hankechief","Dutch for Keyboard","A Male Sheep","Width of a Cut"},
        {"Euler","Erasmus","Fibonnaci","Archemides"},
        {"Shadow of the Collosus","Lighthouse of Alexandria","Colliseum","Parthanon"},
        {"Cars","Nothing","Planes","Plastic Materials"},
        {"True","False"},
        {"True","False"},
        {"4","5","6","7"},
        {"The Lion King","Hamlet","Death of The Salesmen","Phantom of the Opera"},
    };

    String images[] = {
            "1. information.jpg",
            "2.science.jpg",
            "3.wisdom.jpg",             
            };

    RadioQuestion questions[]={

        new RadioQuestion(
            "What is the capital of the Netherlands?",
            answers[0],
            1,this
        ),
        new RadioQuestion(
            "What is a kerf?",
            answers[1],
            3,this
        ),
        new RadioQuestion(
            "Who discovered the number e?",
            answers[2],
            0,this
        ),
        new RadioQuestion(
            "Which of the following is one of the 7 wonders of the ancient world?",
            answers[3],
            1,this
        ),
        new RadioQuestion(
            "Which of the following is not made in China?",
            answers[4],
            1,this
        ),
        new RadioQuestion(
            "True or False, Driving drunk is more dangerous than driving tired",
            answers[5],
            1,this
        ),
        new RadioQuestion(
            "True or False, The Platypus is a mammal",
            answers[6],
            0,this
        ),
        new RadioQuestion(
            "How many strings are there on a standard guitar?",
            answers[7],
            2,this
        ),
        new RadioQuestion(
            "Which of these plays is made by shakespeare?",
            answers[8],
            1,this
        )
    };

    public static void main(String args[]){
        new Quiz();
    }

    public Quiz(){
        super("Quiz Game");
        setResizable(true);
        setSize(500,400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        p.setLayout(cards);
        numQs=questions.length;
        for(int i=0;i<numQs;i++){
            p.add(questions[i],"q"+i);
        }
        Random r=new Random();
        int i=r.nextInt(numQs);
        cards.show(p,"q"+i);
        add(p);
        setVisible(true);
    }

    public void next(){
        if((total-wrongs)==numQs){
            showSummary();
        }else{
            Random r=new Random();
            boolean found=false;
            int i=0;
            while(!found){
                i=r.nextInt(numQs);
                if(!questions[i].used){
                    found=true;
                }
            }
            cards.show(p,"q"+i);
        }
    }

    public void showSummary(){
        JOptionPane.showMessageDialog(null,"All Done :), here are your results"+
            "\nNumber of incorrect Answers: \t"+wrongs+
            "\nNumber of Correct Answers: \t"+(total-wrongs)+
            "\nAverage Incorrect Answers per Quesiotn: \t"+((float)wrongs/numQs)+
            "\nPercent Correct: \t\t"+(int)(((float)(total-wrongs)/total)*100)+"%"
        );
        System.exit(0);
    }
}

RadioQuestion.java文件

import javax.swing.JPanel; 
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;   
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent; 
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.imageio.*;
import java.io.*;

public class RadioQuestion extends JPanel implements ActionListener{
    int correctAns;
    Quiz quiz;  
    int selected;
    boolean used;
    //questions
    JPanel qPanel=new JPanel();
    //answers
    JPanel aPanel=new JPanel();
    JRadioButton[] responses;
    ButtonGroup group=new ButtonGroup();
    //bottom
    JPanel botPanel=new JPanel();
    JButton next=new JButton("Next");
    JButton finish=new JButton("Finish");

    /*public static void main(String args[]){
        JFrame frame=new JFrame("RadioButton Test");
        frame.setSize(400,300);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setResizable(true);

        String[] answers={"wrong1","right","wrong2"};
        frame.add(new RadioQuestion("what's right?",answers,1));

        frame.setVisible(true);
    }*/

    public RadioQuestion(String q, String[] options, int ans, Quiz quiz){
        this.quiz=quiz;
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        correctAns=ans;
        //question
        qPanel.add(new JLabel(q));
        add(qPanel);
        //answer
        responses=new JRadioButton[options.length];

        try{
            JPanel img = new JPanel();
            BufferedImage myPicture = ImageIO.read(new File("‪‪‪C:\Users\syuye\eclipse-workspace\test\src\test")); 
            JLabel picLabel = new JLabel(new ImageIcon(myPicture));
            img.add(picLabel);
            add(img);
        } catch (Exception e) {e.printStackTrace();}

        for(int i=0;i<options.length;i++){
            responses[i]=new JRadioButton(options[i]);
            responses[i].addActionListener(this);
            group.add(responses[i]);
            aPanel.add(responses[i]);
        }
        add(aPanel);
        //bottom
        next.addActionListener(this);
        finish.addActionListener(this);
        botPanel.add(next);
        botPanel.add(finish);
        add(botPanel);
    }

    public void actionPerformed(ActionEvent e){
        Object src=e.getSource();
        //next button
        if(src.equals(next)){
            showResult();
            if(selected==correctAns){
                used=true;
                quiz.next();
            }
        }
        //finish button
        if(src.equals(finish)){
            quiz.showSummary();
        }
        //radio buttons
        for(int i=0;i<responses.length;i++){
            if(src==responses[i]){
                selected=i;
            }
        }
    }

    public void showResult(){
        String text=responses[selected].getText();
        quiz.total++;
        if(selected==correctAns){
            JOptionPane.showMessageDialog(null,text+" is correct\nWell Done :)");
        }else{
            quiz.wrongs++;
            JOptionPane.showMessageDialog(null,text+" is wrong\nSorry :(");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

为简化帮助,请始终像以下示例一样发布mcve。 请注意,它仅包含重现问题(或在这种情况下为解决方案)所需的最少代码。它不是用于演示您的应用程序。
它使用公开可用的资源,因此可以将其复制和调用:

import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class RadioQuestion extends JPanel{

    private static final String bug = "https://upload.wikimedia.org/wikipedia/commons/3/3f/Crystal_Project_bug.png";

    public static void main(String args[]){
         JFrame frame=new JFrame("Image Test");
         frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
         frame.add(new RadioQuestion());
         frame.pack();
         frame.setVisible(true);
    }

    public RadioQuestion(){

        try{
            BufferedImage myPicture = ImageIO.read(new URL(bug));
            JLabel picLabel = new JLabel(new ImageIcon(myPicture));
            add(picLabel);
        } catch (Exception e) {e.printStackTrace();}
    }
}

现在使用此有效代码,并尝试将其与图像一起使用,以轻松找出问题所在。
旁注:切勿通过catch (Exception e) {}使异常静音。