无法从JPanel中的匿名类更改ImageIcon

时间:2013-09-27 12:36:44

标签: java swing jlist imageicon

我正在构建一个图片分类器。我有一个JList文件名,在我的左边我有一个ImageIcon,它应该显示file_chosen中当前JList的图片。

问题是我无法找到更新ImageIcon中包含的JLabel的方法;因为更改出现在ListSelectionListener()所在的匿名类中。

以下是代码:

  public class MemeList extends JPanel{


  public MemeList(){
        // load/update the file list.
        updateFileList();

        this.setLayout(new GridBagLayout());

        JPanel east = new JPanel();
        east.setLayout(new GridBagLayout());
        gbc.gridx = 1;
        gbc.gridy = 0;
        this.add(east,gbc);

        west = new JPanel();
        west.setLayout(new GridBagLayout());
        gbc.gridx = 0;
        gbc.gridy = 0;
        this.add(west,gbc);


            filearray = flist.toArray(new String[flist.size()]);

            list = new JList(filearray);

            list.addListSelectionListener(new ListSelectionListener()
            {
              @Override
                 public void valueChanged(ListSelectionEvent e)
                 {
                     if (!e.getValueIsAdjusting())  
                     {

                         file_chosen = (String) list.getSelectedValue();
                         System.out.println("selected = "+file_chosen);

                     } 
                 }


             });


            meme_preview_icon = new ImageIcon(path + "/" + file_chosen); // file_chosen
            label2 = new JLabel("", meme_preview_icon, JLabel.CENTER);
            gbc.gridx = 0;
            gbc.gridy = 0;
            west.add(label2,gbc);

                updateIcon();

                JScrollPane pane = new JScrollPane();
                pane.getViewport().add(list);
                pane.setPreferredSize(new Dimension(320, 340));
                gbc.gridx = 0;
                gbc.gridy = 0;
                gbc.insets = new Insets(0,0,0,0);
                east.add(pane, gbc);


    }

下面是更改ImageIcon

的方法
public void updateIcon(){

    //west.removeAll();

    meme_preview_icon = new ImageIcon(path + "/" + file_chosen); // file_chosen
    label2.setIcon(meme_preview_icon);

    west.revalidate();
    west.repaint();

}

1 个答案:

答案 0 :(得分:0)

我找到了我的室友的问题。

我只需要调用updateIcon()中的方法ListSelectionListener()。我感到困惑,因为它告诉我它必须是静态的,然后听众不能是静态的。但它就是。

 list.addListSelectionListener(new ListSelectionListener()      
          @Override
             public void valueChanged(ListSelectionEvent e)
             {
                 if (!e.getValueIsAdjusting())  
                 {

                     file_chosen = (String) list.getSelectedValue();
                     System.out.println("selected = "+file_chosen);
                     updateIcon();


                 } 
             }


         });