Saat menggunakan sistem operasi antarmuka grafis, saat membuka folder, sistem akan secara otomatis mencantumkan semua file dan subfolder di bawah folder. Contoh ini mengimplementasikan fungsi yang sama: Pertama, biarkan pengguna memilih folder, dan program akan secara dinamis mencantumkan semua file di bawah folder; jika file adalah file tersembunyi, "Sembunyikan file" akan ditampilkan di bilah properti. Gunakan bilah kemajuan untuk menunjukkan apakah sudah selesai.
Idenya adalah sebagai berikut:
Pertama adalah lapisan tampilan. Tidak perlu menyebutkan Jtextfield, Jbutton, Jscrollpane, dan Jtable. Kontrol secara alami perlu membuat objek sebagai variabel anggota, dan di samping itu, harus ada variabel anggota tipe file untuk mewakili folder yang dipilih.
Contoh ini hanya melibatkan peristiwa satu kontrol, yaitu tombol folder pilih. Dalam peristiwanya, adalah umum untuk memilih folder dan daftar informasi. Setelah pengguna memilih folder, gunakan metode setIndeterminate (true) dari kontrol JProgressBar untuk mengatur bilah gulir untuk mulai menggulir; untuk berhenti menggulir.
Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
impor java.awt.borderlayout;
impor java.awt.eventqueue;
impor java.awt.event.actionevent;
impor java.awt.event.actionlistener;
impor java.awt.event.windowadapter;
impor java.awt.event.windowevent;
impor java.io.file;
impor javax.swing.jbutton;
impor javax.swing.jfilechooser;
impor javax.swing.jframe;
impor javax.swing.jpanel;
impor javax.swing.jprogressbar;
impor javax.swing.jscrollpane;
impor javax.swing.jtable;
impor javax.swing.jtextfield;
impor javax.swing.border.emptyborder;
impor javax.swing.table.defaulttableModel;
impor javax.swing.uimanager;
FileListFrame kelas publik memperluas jframe {
/**
*
*/
SerialVersionuid Long Static Private = -615665572894071265L;
ContentPane Jpanel Pribadi;
Private JTextField ChooseTextField;
Private Jbutton ChooseButton;
scrollpane jscrollpane pribadi;
tabel jtable pribadi;
Progresbar Progresbar Private;
pilihan file pribadi;
/**
* Luncurkan aplikasi.
*/
public static void main (string [] args) {
mencoba {
Uimanager.setLookandFeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
} catch (Throwable e) {
e.printstacktrace ();
}
Eventqueue.invokelater (runnable baru () {
public void run () {
mencoba {
FileListFrame frame = filelistFrame baru ();
frame.setVisible (true);
} catch (Exception e) {
e.printstacktrace ();
}
}
});
}
/**
* Buat bingkai.
*/
public fileListFrame () {
settitle ("/u7a97/u4f53/u52a8/u6001/u52a0/u8f7d/u78c1/u76d8/u6587/u4ef6");
addWindowlistener (windowAdapter baru () {
@Mengesampingkan
public void windowactivated (windowevent arg0) {
do_this_windowactivated (arg0);
}
});
setDefaultCloseOperation (jframe.exit_on_close);
setbounds (100, 100, 450, 300);
ContentPane = jpanel baru ();
contentpane.setborder (baru kosong (5, 5, 5, 5));
setContentPane (ContentPane);
ContentPane.setLayout (BorderLayout baru (0, 0));
Jpanel panel = jpanel baru ();
contentpane.add (panel, borderlayout.north);
chooseTextField = new jTextField ();
Panel.Add (ChooseTextField);
choosetextfield.setColumns (13);
PilihButton = jbutton baru ("/u9009/u62e9/u6587/u4ef6/u5939");
PilihButton.AddactionListener (ActionListener baru () {
public void actionPerformed (actionEvent arg0) {
do_choosebutton_actionperformed (arg0);
}
});
Panel.add (PilihButton);
progressBar = new jprogressbar ();
panel.add (progresbar);
scrollpane = jscrollpane baru ();
contentpane.add (scrollpane, borderlayout.center);
tabel = jtable baru ();
scrollpane.setViewPortView (tabel);
}
void do_choosebutton_actionperformed (actionEvent arg0) {{arg0) {
Jfilechooser filechooser = jfilechooser baru ();
filechooser.setFilesElectionMode (jfilechooser.directories_only);
filechooser.setMultiselectionEnabled (false);
int result = filechooser.showopendialog (ini);
if (result == jfilechooser.approve_option) {
chooseFile = filechooser.getSelectedFile (); // Dapatkan folder yang dipilih oleh pengguna
choosetextfield.setText (chooseFile.getAbsolutePath ()); // Tampilkan folder yang dipilih oleh pengguna
Progressbar.setIndeterminate (true); // Atur scrollbar untuk mulai menggulir
file akhir [] subfiles = chooseFile.listFiles (); // Dapatkan semua file (folder) di folder yang dipilih oleh pengguna
final defaultTableModel model = (defaultTableModel) Table.getModel ();
model.setrowcount (0); // Hapus tabel
utas baru () {// Mulai utas baru
public void run () {
untuk (int i = 0; i <subfiles.length; i ++) {// traverse folder yang dipilih oleh pengguna
if (subfiles [i] .isfile ()) {// Tentukan apakah itu file
Objek [] properti = objek baru [3];
Properti [0] = i + 1; // Simpan nomor serial
properti [1] = subfile [i] .getName (); // Simpan nama file
properti [2] = "";
if (subfiles [i] .ishidden ()) {// Tentukan apakah itu file tersembunyi
properti [2] = "file tersembunyi";
}
model.addrow (properti); // Tambahkan catatan ke tabel
Table.setModel (model); // Perbarui tabel
}
mencoba {
Thread.sleep (100); // Thread tidur selama 0,1 detik untuk mencapai pemuatan dinamis
} catch (InterruptedException e) {
e.printstacktrace ();
}
}
Progressbar.setIndeterminate (false); // Hentikan gulir bilah kemajuan
};
}.awal();
}
}
void do_this_windowactivated (windowevent arg0) {
DefaultTableModel model = (defaultTableModel) Table.getModel ();
model.setColumnIdentifiers (objek baru [] {"nomor seri", "nama file", "properti"});
}
}
Efeknya ditunjukkan pada gambar: