그래픽 인터페이스 운영 체제를 사용할 때 폴더를 열 때 시스템은 폴더 아래에 모든 파일과 하위 폴더를 자동으로 나열합니다. 이 예제는 유사한 기능을 구현합니다. 먼저 사용자가 폴더를 선택하게하고 프로그램이 폴더 아래에 모든 파일을 동적으로 나열하면 "파일 숨기기"가 속성 표시 줄에 표시됩니다. 진행률 표시 줄을 사용하여 완료되었는지 여부를 나타냅니다.
아이디어는 다음과 같습니다.
첫 번째는 뷰 레이어입니다. Jtextfield, Jbutton, JSCrollpane 및 JTable은 모두 오랜 친구가되므로 JPROGRESSBAR 컨트롤이 있습니다. 컨트롤은 자연스럽게 멤버 변수로 객체를 생성해야하며, 또한 선택한 폴더를 나타내는 파일 형 멤버 변수가 있어야합니다.
이 인스턴스에는 하나의 컨트롤, 즉 선택 폴더 버튼 만 포함됩니다. 이벤트에서는 폴더를 선택하고 정보를 목록하는 것이 일반적입니다. 사용자가 폴더를 선택한 후 JPROGRESSBAR 컨트롤의 setIndEterMinate (True) 메소드를 사용하여 스크롤 막대가 스크롤을 시작한 후 SCROLL BAR을 SetIndEterminate (False) 메소드에 의해 중지됩니다. 스크롤을 중지합니다.
코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
java.awt.borderlayout import;
java.awt.eventqueue import;
import java.awt.event.actionevent;
import java.awt.event.actionListener;
java.awt.event.windowadapter를 가져옵니다.
java.awt.event.windowevent import;
import java.io.file;
import javax.swing.jbutton;
import javax.swing.jfilechooser;
import javax.swing.jframe;
import javax.swing.jpanel;
import javax.swing.jprogressbar;
import javax.swing.jscrollpane;
import javax.swing.jtable;
import javax.swing.jtextfield;
import javax.swing.border.emptyborder;
import javax.swing.table.defaultTableModel;
import javax.swing.uimanager;
public class filelistframe은 jframe {
/**
*
*/
개인 정적 최종 최종 긴 SerialversionUID = -61566572894071265L;
개인 jpanel contentpane;
개인 Jtextfield Choosetextfield;
개인 JBUTTON 선택 BUTTON;
개인 jscrollpane scrollpane;
개인 JTable 테이블;
개인 JPROGRESSBAR ProgressBar;
개인 파일 선택 파일;
/**
* 응용 프로그램을 시작하십시오.
*/
public static void main (String [] args) {
노력하다 {
uimanager.setLookandFeel ( "com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
} catch (Throwable e) {
e.printstacktrace ();
}
eventqueue.invokelater (new Runnable () {
public void run () {
노력하다 {
filleListFrame Frame = New FileListFrame ();
frame.setVisible (true);
} catch (예외 e) {
e.printstacktrace ();
}
}
});
}
/**
* 프레임을 만듭니다.
*/
public filelistframe () {
settitle ( "/u7a97/u4f53/u52a8/u6001/u52a0/u8f7d/u78c1/u76d8/u6587/u4ef6");
AddWindowListener (새 WindowAdapter () {
@보수
public void windowactivated (windowevent arg0) {
do_this_windowActivated (arg0);
}
});
setDefaultCloseOperation (jframe.exit_on_close);
세트 바운드 (100, 100, 450, 300);
ContentPane = 새로운 jpanel ();
ContentPane.SetBorder (New Emptyborder (5, 5, 5, 5));
SetContentPane (ContentPane);
ContentPane.SetLayout (New BorderLayout (0, 0));
JPANEL 패널 = 새로운 JPANEL ();
contentpane.add (Panel, BorderLayout.north);
choosetextfield = new jtextfield ();
PALEN.ADD (chooSetextField);
choosetextfield.setColumns (13);
선택 부턴 = 새로운 JBUTTON ( "/u9009/u62e9/u6587/u4ef6/u5939");
chelectionButton.addactionListener (new ActionListener () {
public void actionperformed (ActionEvent arg0) {
do_choosebutton_actionperformed (arg0);
}
});
PALEN.ADD (선택 부턴);
ProgressBar = 새로운 jprogressbar ();
PALEN.ADD (ProgressBar);
scrollpane = new jscrollpane ();
contentpane.add (scrollpane, borderlayout.center);
표 = 새로운 jtable ();
scrollpane.setViewPortView (표);
}
보호 된 void do_choosebutton_actionperformed (ActionEvent arg0) {
JFILECHOOSER FILECHOOSER = NEW JFILECHOOSER ();
filechooser.setfileSelectionMode (jfilechooser.directories_only);
filechooser.setmultielectionEnabled (false);
int result = filechooser.showopendialog (this);
if (result == jfileChooser.Approve_Option) {
선택 파일 = filechooser.getSelectedFile (); // 사용자가 선택한 폴더 가져 오기
choosetextfield.settext (선택한 file.getabsolutepath ()); // 사용자가 선택한 폴더를 표시합니다
ProgressBar.SetIndEterMinate (true); // 스크롤 바를 스크롤을 시작하도록 설정합니다
최종 파일 [] subfiles = chelesefile.listfiles (); // 사용자가 선택한 폴더에서 모든 파일 (폴더)을 가져옵니다.
최종 DefaultTableModel Model = (DefaultTableModel) table.getModel ();
model.setrowcount (0); // 테이블을 지우십시오
새 스레드 () {// 새 스레드를 시작합니다
public void run () {
for (int i = 0; i <subfiles.length; i ++) {// 사용자가 선택한 폴더를 통과
if (subfiles [i] .isfile ()) {// 파일인지 결정합니다
대상 [] 속성 = 새 개체 [3];
속성 [0] = i + 1; // 일련 번호를 저장합니다
속성 [1] = 서브 파일 [i] .getName (); // 파일 이름을 저장합니다
속성 [2] = "";
if (subfiles [i] .ishidden ()) {// 숨겨진 파일인지 결정
속성 [2] = "숨겨진 파일";
}
model.addrow (속성); // 테이블에 레코드를 추가합니다
table.setmodel (model); // 테이블을 업데이트합니다
}
노력하다 {
Thread.sleep (100); // 스레드는 0.1 초 동안 잠을 자고 동적 로딩을 달성합니다.
} catch (InterruptedException e) {
e.printstacktrace ();
}
}
ProgressBar.SetIndEterMinate (false); // 진행률 표시 줄 스크롤을 중지합니다
};
}.시작();
}
}
보호 된 void do_this_windowActivated (windowevent arg0) {
defaultTableModel model = (defaultTableModel) table.getModel ();
model.setColumnIngifiers (new Object [] { "Serial Number", "File Name", "Properties"});
}
}
효과는 그림에 나와 있습니다.