Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实时刷新帧的内容_Java_Swing - Fatal编程技术网

Java 实时刷新帧的内容

Java 实时刷新帧的内容,java,swing,Java,Swing,可能重复: 我正在用Java编写一个Explorer程序,其工作原理如下 我从用户输入路径,在用户按下enter键后,设置一个文本框,计算文件夹列表,并创建相应的标签,这些标签应该显示在窗口上,但应用程序不显示文件夹的新内容,如果我更改文本,则它将指向一个新目录,因此当我按enter键时,它必须显示加载的新目录的内容,但只有在调整窗口大小后,它才会显示框架的新内容 代码如下 package explorer; import java.io.*; import java.util.*; impo

可能重复:

我正在用Java编写一个Explorer程序,其工作原理如下
我从用户输入路径,在用户按下enter键后,设置一个文本框,计算文件夹列表,并创建相应的标签,这些标签应该显示在窗口上
,但应用程序不显示文件夹的新内容,如果我更改文本,则它将指向一个新目录,因此当我按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);  
          }

        }
      });
}   
}
packageexplorer;
导入java.io.*;
导入java.util.*;
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
公共类资源管理器扩展JFrame{
文件;
扫描仪扫描;
字符串路径;
字符串[]列表文件;
JTextField-txtPath;
JLabel-lballocation;
JLabel child[];
JPanel儿童小组;
JPanel主面板;
公共资源管理器(){
lblLocation=新的JLabel(“位置:”);
/*
*小组宣言
*/
主面板=新的JPanel();
childPanel=newjpanel();
JPanel面板=新的JPanel();
/*其他组成部分的声明*/
txtPath=新的JTextField(“,20);
/*将组件添加到面板以进行布局*/
面板。添加(LBallocation);
panel.add(txtPath);
/*添加到主面板,用于复杂布局*/
主面板。添加(面板,边框布局。北);
主面板。添加(子面板,边框布局。南);
getContentPane().add(主面板);
/*在ubuntu上获取地址的地方,如/home/revolution/Desktop等*/
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件ev){
childPanel.removeAll();
path=新字符串(txtPath.getText());//绝对路径
文件=新文件(路径);
文件childFiles[];
String name=path.substring(path.lastIndexOf('/')+1,path.length());//正在显示的目录的名称
片名(姓名);
如果(!file.isDirectory()){
showMessageDialog(null,“错误文件不是目录”);
}否则{
listOfFiles=file.list();
child=new JLabel[listOfFiles.length];//标签等于文件的数量,并且具有共同响应的文件/文件夹的名称
childFiles=新文件[listOfFiles.length];//对文件的引用
setLayout(新的网格布局(listOfFiles.length/2,listOfFiles.length/2));//设置网格布局
对于(inti=0;i我认为您需要打开面板

更准确地说,在动作侦听器的末尾,您可以添加
childPanel.revalidate();

我想你需要加入小组

更准确地说,在动作侦听器的末尾,您可以添加
childPanel.revalidate();


使用revalidate()方法根据新组件列表重置。revalidate()方法做什么?我还没有在任何一本书中遇到过它….@lucifer查看更多关于@nitichahajeruse revalidate()方法根据新组件列表重置的信息。revalidate()方法做什么方法是什么?我在任何一本书中都没有遇到过它….@lucifer请查看发布在@Nitinchajer的方法的更多信息,因为他正在移除组件,所以他还必须调用
repaint()
在包含JPanel的面板上。但是,由于他只是更改子面板,因此在重新绘制整个子面板时,子面板上的
重新验证
应该能够处理所有事情。不,如果他也正在移除组件,则不会。注意第一次调用
actionPerformed(…)
方法--
childPanel.removeAll()由于他正在移除组件,他还必须调用
repaint()
在包含JPanel的面板上。但是,由于他只是更改子面板,因此在重新绘制整个子面板时,子面板上的
重新验证
应该能够处理所有事情。不,如果他也正在移除组件,则不会。注意第一次调用
actionPerformed(…)
方法--
childPanel.removeAll();
      childPanel.setVisible(true);  
      }
    }
    childPanel.revalidate();
});