setIcon no muestra imágenes en absoluto

Helma Koto:

He probado todas las posibles solutioin en línea, pero nada parece funcionar. Estoy tratando de mostrar banderas para mi bandera juego de adivinanzas. Me he fijado en el icono de JLabel flagIconJLabel en el displayFlag () función, pero no demuestra realmente la imagen de la bandera cuando ejecuto el programa. No veo ninguna bichos, así que estoy atascado. El camino está bien puedo mostrar las imágenes por sí mismos. Por favor ayuda :/

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);}}
Sólo inténtalo :

probar esto, está funcionando para mí, tengo la imagen en un mismo envase, sin embargo, pero se puede enviar ruta relativa también, estoy usando otro constructor de ImageIcon donde pasa la URL he intentado pasar ruta de la imagen como cadena no funcionó para mí

   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));
        }
    }

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=379025&siteId=1
Recomendado
Clasificación