是的setIcon根本不显示图像

Helma江东:

我曾尝试一切可能的solutioin在线,但似乎没有任何工作。我想,以显示我的标志竞猜游戏标志。我设置JLabel的图标flagIconJLabeldisplayFlag()函数,但它实际上并没有显示标志图像,当我运行程序。我没有看到任何错误,所以我卡住了。路径是好的,我可以自己显示图像。请帮忙 :/

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

public class FlagQuiz extends JFrame{
  private String[] countries = { "Russia", "China", "United States",
      "Italy", "Australia", "South Africa", "Brazil", "Spain" };

  private boolean[] flagsUsed = new boolean[countries.length];
  private int currentIndex;
  private int count = 1;
  private JPanel flagJPanel;
  private JLabel flagIconJLabel;
  private JLabel selectCountryJLabel;
  private JComboBox selectCountryJComboBox;
  private JTextField feedbackJTextField;
  private JButton submitJButton;
  private JButton nextFlagJButton;

  public FlagQuiz() {
    createUserInterface();
  }

  private void createUserInterface(){
    Container contentPane = getContentPane();
    contentPane.setLayout(null);

    flagJPanel = new JPanel();
    flagJPanel.setBounds(16, 8, 100, 90);
    flagJPanel.setLayout(null);
    flagJPanel.setBorder(new TitledBorder("Flag"));
    contentPane.add(flagJPanel);

    flagIconJLabel = new JLabel();
    flagIconJLabel.setBounds(10, 14, 80, 80);
    flagIconJLabel.setHorizontalAlignment(JLabel.CENTER);
    flagJPanel.add(flagIconJLabel);

    selectCountryJLabel = new JLabel();
    selectCountryJLabel.setBounds(136, 8, 88, 21);
    selectCountryJLabel.setText("Select country:");
    contentPane.add(selectCountryJLabel);

    Arrays.sort(countries);

    selectCountryJComboBox = new JComboBox(countries);
    selectCountryJComboBox.setBounds(136, 32, 135, 21);
    selectCountryJComboBox.setMaximumRowCount(3);
    contentPane.add(selectCountryJComboBox);

    displayFlag();

    // set up feedbackJTextFiel

    feedbackJTextField = new JTextField();
    feedbackJTextField.setBounds(136, 64, 135, 32);
    feedbackJTextField.setHorizontalAlignment(
        JTextField.CENTER);
    feedbackJTextField.setEditable(false);
    contentPane.add(feedbackJTextField);

    submitJButton = new JButton();
    submitJButton.setBounds(287, 8, 88, 32);
    submitJButton.setText("Submit");
    contentPane.add(submitJButton);
    submitJButton.addActionListener(
        new ActionListener(){
          public void actionPerformed(ActionEvent event){
            submitJButtonActionPerformed(event);}}
    );

    // set up nextFlagJButton
    nextFlagJButton = new JButton();
    nextFlagJButton.setBounds(287, 48, 88, 32);
    nextFlagJButton.setText("Next Flag");
    nextFlagJButton.setEnabled(false);
    contentPane.add(nextFlagJButton);
    nextFlagJButton.addActionListener(
    new ActionListener(){
          public void actionPerformed(ActionEvent event){
            nextFlagJButtonActionPerformed(event);}}
    );

    setTitle("Flag Quiz");
    setSize(390, 135);
    setVisible(true);
  }

  private int getUniqueRandomNumber(){
    Random generator = new Random();
    int randomNumber;
    do{
      randomNumber = generator.nextInt(8);}
    while (flagsUsed[randomNumber] == true);
    flagsUsed[randomNumber] = true;
    return randomNumber; }

  private void displayFlag(){
    currentIndex = getUniqueRandomNumber();
    String country =
        (String) selectCountryJComboBox.getItemAt(currentIndex);
    String countryPath = "images/" + country + ".png";
    flagIconJLabel.setIcon(new ImageIcon(countryPath));}

  private void submitJButtonActionPerformed(ActionEvent event){
    if (selectCountryJComboBox.getSelectedIndex()
        == currentIndex){
      feedbackJTextField.setText("Correct!");}
    else{
      feedbackJTextField.setText("Sorry, incorrect.");}
    if (count == 5){
      feedbackJTextField.setText(
          feedbackJTextField.getText() + "   Done!");
      nextFlagJButton.setEnabled(false);
      submitJButton.setEnabled(false);
      selectCountryJComboBox.setEnabled(false); }
    else{
      submitJButton.setEnabled(false);
      nextFlagJButton.setEnabled(true);}}

  private void nextFlagJButtonActionPerformed(ActionEvent event){
    displayFlag();
    count++;
    feedbackJTextField.setText("");       
    selectCountryJComboBox.setSelectedIndex(0);
    submitJButton.setEnabled(true);
    nextFlagJButton.setEnabled(false);}

  public static void main(String[] args){
    FlagQuiz application = new FlagQuiz();
    application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
你试一试 :

试试这个,它的工作对我来说,我在同一个包,虽然形象,但你也可以发送相对路径,我使用的地方通过URL我试图传递图像路径字符串没有工作对我来说ImageIcon的其它构造

   protected static ImageIcon createImage(String path, String description) {
        URL imageURL = YourClass.class.getResource(path);

        if (imageURL == null) {
            System.err.println("Resource not found: " + path);
            return null;
        } else {
            return (new ImageIcon(imageURL, description));
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章