データを保存するユニットとして、ファイルはデータ型に従って多くのカテゴリを生成します。これはいわゆるファイルタイプです。データファイルを操作する場合、さまざまなファイルタイプに従って異なる処理が必要になることがよくあります。この例では、指定されたタイプのフォルダーのファイルの読み取りを実装し、それらをテーブルコントロールに表示します。これは、プロジェクト開発におけるファイルの分類を引き付ける役割を果たします。
アイデア分析:
フォームアプリケーションであるため、最初にビューレイヤーを見てください。フォルダーを選択するには、ボタンコントロールが必要です。ファイルタイプを入力します。
ボタンコントロールの場合、この方法でイベント処理方法をバインドします。最初にjfileChooserファイルセレクターオブジェクトを作成し、セレクターのフィルターを設定します。 。条件を満たすフィルタリングされたファイルアレイを取得します。
テキストボックスコントロールの場合、内部のテキストが変更されると、選択したパスのファイルを再フィルタリングする必要があります。条件のファイル。
ボタンコントロールとテキストボックスコントロールの両方がフィルタリングとディスプレイを実装する必要があるため、フィルタリングと表示は別の方法として使用できます。 )ファイルクラスのメソッド条件を満たすファイルアレイを取得し、値をファイルタイプの配列に割り当ててから、jtableクラスのgetModel()メソッドを使用してテーブルのデータモデルを取得し、setrowを使用しますデータモデルを取得するためのdefaultTableModelクラスの。 count()メソッドは最初にテーブルをクリアし、次にforeach()を使用してファイル配列をループし、ループ内のオブジェクト[]配列を使用してテーブル行データを作成し、ファイルクラスのgetName()メソッドを呼び出してファイル名を取得します、およびファイルサイズを取得する長さ()メソッド、lastModified()メソッドは変更日を取得し、最後にdefaultTableModelクラスのaddRow()メソッドを使用して、表データを表形式モデルに追加します。
コードは次のとおりです。
コードコピーは次のとおりです。
java.awt.borderlayoutをインポートします。
java.awt.eventqueueをインポートします。
java.awt.gridbagconstraintsをインポートします。
java.awt.gridbaglayoutをインポートします。
java.awt.insetsをインポートします。
java.awt.event.actioneventをインポートします。
java.awt.event.actionlistenerをインポートします。
java.io.fileをインポートします。
java.sql.dateをインポートします。
javax.swing.jbuttonをインポートします。
javax.swing.jfilechooserをインポートします。
javax.swing.jframeをインポートします。
javax.swing.jlabelをインポートします。
javax.swing.jpanelをインポートします。
javax.swing.jscrollpaneをインポートします。
javax.swing.jtableをインポートします。
javax.swing.jtextfieldをインポートします。
javax.swing.border.emptyborderをインポートします。
javax.swing.event.careteventをインポートします。
javax.swing.event.caretlistenerをインポートします。
javax.swing.table.defaultTableModelをインポートします。
public class listcustomtypefileはjframeを拡張します{
/**
*
*/
private static final long serialversionuid = -62639751044443132420l;
/**
*カスタム拡張フィルター
*
* @author li Zhongwei
*/
プライベートファイナルクラスのカスタムフィルターはjava.io.filefilterを実装します{
@オーバーライド
public boolean accept(file pathname){
//ユーザーが設定した指定された拡張機能を取得します
文字列extname = extnamefield.getText();
if(extname == null || extname.isempty())
falseを返します。
if(!extname.startswith( "。"))//拡張機能を決定します
extname = "。 + extname; //完全なプレフィックス
extname = extname.tolowercase();
//拡張機能とフィルターファイル名が要件を満たしているかどうかを判断します
if(pathname.getname()。tolowercase()。endswith(extname))
trueを返します。
falseを返します。
}
}
プライベートJPanel ContentSpane;
プライベートjtextfield extnamefield;
プライベートJTableテーブル。
プライベートファイル監督;
プライベートJlabelラベル。
/**
*アプリケーションを起動します。
*/
public static void main(string [] args){
eventqueue.invokelater(new runnable(){
public void run(){
試す {
listcustomtypefile frame = new listcustomtypefile();
frame.setVisible(true);
} catch(例外e){
e.printstacktrace();
}
}
});
}
/**
*フレームを作成します。
*/
public listcustomtypefile(){
settitle( "指定されたタイプのファイルを表示");
setDefaultCloseoperation(jframe.exit_on_close);
セットバウンド(100、100、450、300);
contentSpane = new JPanel();
contentSpane.setborder(新しいemptyborder(5、5、5、5));
contentSpane.setLayout(new borderlayout(0、0));
setContentPane(contentSpane);
jpanelパネル= new JPanel();
contentSpane.add(パネル、borderlayout.north);
gridbaglayout gbl_panel = new gridbaglayout();
gbl_panel.columnwidths = new int [] {93、54、0};
gbl_panel.rowheights = new int [] {23、0、0};
gbl_panel.columnweights = new double [] {0.0、1.0、double.min_value};
gbl_panel.rowweights = new double [] {0.0、0.0、double.min_value};
panel.setlayout(gbl_panel);
jbutton button = new jbutton( "Select Folder");
button.addActionListener(new ActionListener(){
public void actionperformed(ActionEvent e){
do_button_actionperformed(e);
}
});
gridbagconstraints gbc_button = new gridbagconstraints();
gbc_button.anchor = gridbagconstraints.north;
gbc_button.gridx = 0;
gbc_button.gridy = 0;
panel.add(button、gbc_button);
label = new Jlabel( "Folder");
gridbagconstraints gbc_label = new gridbagconstraints();
gbc_label.fill = gridbagconstraints.horizontal;
gbc_label.gridx = 1;
gbc_label.gridy = 0;
panel.add(label、gbc_label);
Jlabel label_1 = new Jlabel( "指定されたファイル拡張機能名を入力してください:");
gridbagconstraints gbc_label_1 = new gridbagconstraints();
gbc_label_1.anchor = gridbagconstraints.east;
gbc_label_1.insets = new Insets(0、0、0、5);
gbc_label_1.gridx = 0;
gbc_label_1.gridy = 1;
panel.add(label_1、gbc_label_1);
extnamefield = new jtextfield();
extnamefield.addcaretlistener(new CaretListener(){
public void careupdate(caretevent e){
do_extnamefield_caretupdate(e);
}
});
extnamefield.settext( "。gif");
gridbagconstraints gbc_extnamefield = new gridbagconstraints();
gbc_extnamefield.insets = new Insets(0、0、5、0);
gbc_extnamefield.fill = gridbagconstraints.horizontal;
gbc_extnamefield.gridx = 1;
gbc_extnamefield.gridy = 1;
panel.add(extnamefield、gbc_extnamefield);
extnamefield.setColumns(10);
jscrollpane scrollpane = new jscrollpane();
contentSpane.add(scrollpane、borderlayout.center);
表= new Jtable();
table.setautoreizeMode(jtable.auto_resize_off);
table.setModel(new DefaultTableModel(new object [] [] {}、new String [] {"file name"、 "file size"、 "modification date"}){
/**
*
*/
private static final long serialversionuid = 5274214559103654856l;
boolean [] columneditables = new boolean [] {false、false、false};
public boolean iscelledable(int row、int column){
columnEdiTablesを返します[列];
}
});
table.getColumnModel()。getColumn(0).setPreferredWidth(220);
table.getColumnModel()。getColumn(1).setPreferredWidth(85);
table.getColumnModel()。getColumn(2).setPreferredWidth(110);
scrollpane.setviewportview(表);
}
/**
*フォルダのイベント処理方法を選択します
*
* @param e
*/
保護されたvoid do_button_actionperformed(actionevent e){
jfilechooser chooser = new jfilechooser(); //ファイルセレクターを作成します
//セレクターのフィルターを設定します
chooser.setfileselectionMode(jfilechooser.directories_only);
chooser.showdialog(this、null);
dir = chooser.getSelectedFile();
getLabel()。setText(dir.toString());
//基準を満たすフィルタリングされたファイル配列を取得します
listfiles();
}
/**
*フォルダーにファイルを表示します
*/
private void listfiles(){
if(dir == null)
戻る;
//基準を満たすファイル配列を取得します
file [] files = dir.listfiles(new CustomFilter());
//テーブルのデータモデルを取得します
DefaultTableModel Model =(defaultTableModel)table.getModel();
model.setRowCount(0);
for(ファイル:ファイル){//ファイル配列をトラバース
//テーブルの行データを作成します
object [] row = {file.getName()、file.length()、
new Date(file.lastModified())};
Model.Addrow(row); // ow data data add ow datul obularモデル
}
}
保護されたvoid do_extnamefield_caretupdate(caretevent e){
listfiles();
}
保護されたjlabel getLabel(){
返品ラベル。
}
}
効果は写真に示されています: