0

私は現在、画像ソーターを構築しています。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();

}
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 に答える