JTableエクスプローラ風サンプル
- C:\直下のファイル一覧をJTableに表示するサンプルです。
- ファイル名のカラムはファイル名とアイコンを、ファイルサイズのカラムはカンマ区切り右寄せ、日付のカラムは右寄せで表示します。
- カラム毎に表示を切り替えるには、DefaultTableCellRendererを継承して、各カラムのレンダラーを作成します。
- もっとエクスプローラに近い見た目にするには、以下のサイトを参考にするといいです
サンプルダウンロード
ソース
import java.awt.Component;
import java.io.File;
import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.filechooser.FileSystemView;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
/*
* JTableエクスプローラ風サンプル
* ・C:\直下のファイル一覧をJTableに表示するサンプルです。
* ・ファイル名のカラムはファイル名とアイコンを、ファイルサイズのカラムはカンマ区切り右寄せ、日付のカラムは右寄せで表示します。
* ・カラム毎に表示を切り替えるには、DefaultTableCellRendererを継承して、各カラムのレンダラーを作成します。
*/
public class PathToJTable extends JFrame {
JTable tbl;
DefaultTableModel model;
public static void main(String[] args) {
new PathToJTable();
}
public PathToJTable() {
setTitle("エクスプローラ風JTable");
setBounds(200, 100, 400, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// C:\のファイル一覧を取得
File path = new File("C:\\");
File[] files = path.listFiles();
// モデルを生成
model = new DefaultTableModel();
// カラム名ほ設定
model.setColumnIdentifiers(new String[] { "ファイル名", "サイズ", "日付" });
// ファイル名、サイズ、日付の分だけ全部Fileの配列にして行を追加
for (File file : files) {
model.addRow(new File[] { file, file, file });
}
// テーブルモデルからJTableを作成
tbl = new JTable(model);
// それぞれのカラムにレンダラーを設定
tbl.getColumnModel().getColumn(0)
.setCellRenderer(new FileNameTableCellRenderer());
tbl.getColumnModel().getColumn(1)
.setCellRenderer(new FileSizeTableCellRenderer());
tbl.getColumnModel().getColumn(2)
.setCellRenderer(new FileDateTableCellRenderer());
// JTableをフレームに追加
add(new JScrollPane(tbl));
setVisible(true);
}
// ファイル名セルレンダラー
class FileNameTableCellRenderer extends DefaultTableCellRenderer {
FileSystemView fs = FileSystemView.getFileSystemView();
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (value instanceof File) {
File f = (File) value;
// ファイル名とアイコン
setText(fs.getSystemDisplayName(f));
setIcon(fs.getSystemIcon(f));
}
return this;
}
}
// ファイルサイズセルレンダラー
class FileSizeTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (value instanceof File) {
File f = (File) value;
// ファイルサイズ(カンマ区切り
setText(String.format("%1$,3d", f.length()));
setHorizontalAlignment(RIGHT);
}
return this;
}
}
// 日付セルレンダラー
class FileDateTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (value instanceof File) {
File f = (File) value;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm");
setText(sdf.format(new Date(f.lastModified())));
}
return this;
}
}
}
コメント
最終更新:2012年12月16日 00:39