0

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

问题是我找不到更新ImageIcon包含在 a 中的方法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();

}
4

1 回答 1

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


                 } 
             }


         });
于 2013-09-27T12:55:16.093 回答