ArrayIndexOutOfBoundsException в приложении JComboBox

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

public class GUI extends JFrame {
private JComboBox box ;

private JLabel picture ;

private static String[] filename={"Phone.png","Music.png"};

private Icon[] pics={new ImageIcon(getClass().getResource(filename[0]))};

    public GUI(){
        super("JComboBox");
        setLayout(new FlowLayout());
        box=new JComboBox (filename);

        box.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent event){
                    if(event.getStateChange()==ItemEvent.SELECTED)
                        picture.setIcon(pics[box.getSelectedIndex()]);
                }
            }
            );

        add(box);
        picture=new JLabel(pics[0]);
        add(picture);
    }
}

Когда я пытаюсь проверить music.png это дает мне эту ошибку

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 1
        at GUI$1.itemStateChanged(GUI.java:20)
        at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1222)
        at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1279)
        at javax.swing.JComboBox.contentsChanged(JComboBox.java:1326)
        ...

1 ответ

Решение

Начнем с того, что вы указали два имени файла, но загрузили только одно изображение

private static String[] filename = {"Phone.png", "Music.png"};
private Icon[] pics = {new ImageIcon(getClass().getResource(filename[0]))};

Попробуйте загрузить оба изображения...

private Icon[] pics = {
    new ImageIcon(getClass().getResource(filename[0])),
    new ImageIcon(getClass().getResource(filename[1]))
};
Другие вопросы по тегам