1

重複の可能性:
Swing コンポーネントをリフレッシュするために revalidate() を呼び出す必要があるのはいつですか?

私はJavaでエクスプローラープログラムを作成しています。次のように機能します
。ユーザーからパスを入力し、ユーザーがパスを入力した後のテキストボックスが設定され、フォルダーのリストが計算され、表示されるはずの対応するラベルが作成されますウィンドウに表示されます
が、アプリケーションはフォルダーの新しい内容を表示しません。テキストを変更すると新しいディレクトリに移動するため、Enter キーを押すと、ロードされた新しいディレクトリの内容を表示する必要がありますが、サイズを変更した後にのみ表示されます。ウィンドウはフレームの新しい内容を表示しますか?

コードは次のとおりです

package explorer;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Explorer extends JFrame{
    File file;
    Scanner scan;
    String path;
    String [] listOfFiles;
    JTextField txtPath;
    JLabel lblLocation;
    JLabel child[];
    JPanel childPanel;
    JPanel masterPanel;

       public Explorer(){
      lblLocation = new JLabel("Location: ");
      /*
       * the declaration of panels
       */
          masterPanel = new JPanel();
          childPanel = new JPanel();
      JPanel panel = new JPanel();

      /*declaration of other components*/

      txtPath = new JTextField("",20);
      /*addition of components to panel for layout*/
      panel.add(lblLocation);
      panel.add(txtPath);
      /*adding to master panel, for sophisticated layout*/
      masterPanel.add(panel, BorderLayout.NORTH);
      masterPanel.add(childPanel, BorderLayout.SOUTH);  

      getContentPane().add(masterPanel);
      /*this place from where address is fetched like /home/revolution/Desktop etc on ubuntu*/

      txtPath.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev){
            childPanel.removeAll();
        path = new String(txtPath.getText());//the absolute path
        file = new File(path);
        File childFiles[];
        String name = path.substring(path.lastIndexOf('/')+1, path.length());//the name of the directory being displayed
        setTitle(name);

          if(!file.isDirectory()){
            JOptionPane.showMessageDialog(null, "Error file is not a directory");
          } else {
            listOfFiles = file.list();
            child = new JLabel[listOfFiles.length];// labels equal to the number fo files and with name of the coresponding file/folder

            childFiles = new File[listOfFiles.length];//references to files
            childPanel.setLayout(new GridLayout(listOfFiles.length/2,listOfFiles.length/2));//setting grid layout

            for(int i=0; i<listOfFiles.length;i++){
                childFiles[i] = new File(listOfFiles[i]);
                child[i] = new JLabel(listOfFiles[i]);
                child[i].setToolTipText(childFiles[i].isFile()?"File":"Folder");
                childPanel.add(child[i]);
            }
          childPanel.setVisible(true);  
          }

        }
      });
}   
}

なにが問題ですか?ウィンドウの内容を「更新」するにはどうすればよいですか??

4

1 に答える 1

1

revalidate()パネルが必要だと思います。

より正確には、アクションリスナーの最後に追加できますchildPanel.revalidate();

      childPanel.setVisible(true);  
      }
    }
    childPanel.revalidate();
});
于 2012-05-21T18:56:58.420 に答える