「Java/swing/サンプル/JTableエクスプローラ風サンプル」の編集履歴(バックアップ)一覧はこちら

Java/swing/サンプル/JTableエクスプローラ風サンプル」(2012/12/16 (日) 00:39:53) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

&ref(swingJTableエクスプローラ風サンプル.png) * JTableエクスプローラ風サンプル - C:\直下のファイル一覧をJTableに表示するサンプルです。 - ファイル名のカラムはファイル名とアイコンを、ファイルサイズのカラムはカンマ区切り右寄せ、日付のカラムは右寄せで表示します。 - カラム毎に表示を切り替えるには、DefaultTableCellRendererを継承して、各カラムのレンダラーを作成します。 - もっとエクスプローラに近い見た目にするには、以下のサイトを参考にするといいです JTableのセルをエクスプローラ風に表示する - Java Swing Tips http://terai.xrea.jp/Swing/ExplorerLikeTable.html *** サンプルダウンロード &ref(PathToJTable.java) *** ソース #highlight(java){{ 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; } } } }}
&ref(swingJTableエクスプローラ風サンプル.png) * JTableエクスプローラ風サンプル - C:\直下のファイル一覧をJTableに表示するサンプルです。 - ファイル名のカラムはファイル名とアイコンを、ファイルサイズのカラムはカンマ区切り右寄せ、日付のカラムは右寄せで表示します。 - カラム毎に表示を切り替えるには、DefaultTableCellRendererを継承して、各カラムのレンダラーを作成します。 - もっとエクスプローラに近い見た目にするには、以下のサイトを参考にするといいです JTableのセルをエクスプローラ風に表示する - Java Swing Tips http://terai.xrea.jp/Swing/ExplorerLikeTable.html *** サンプルダウンロード &ref(PathToJTable.java) *** ソース #highlight(java){{ 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; } } } }} * コメント #pcomment(reply)

表示オプション

横に並べて表示:
変化行の前後のみ表示: