TableCellRendererの設定部分が長くなってきたのでメソッドをわけてみた。
JLabelの背景設定部分が共通だし、他にもJLabelの設定が増えるかもしれないので、それ用のメソッドを作っておこう。
だいぶプログラミング力が落ちていると実感しながら作っている
private static void setFileNameRenderer(TableColumn tc){ tc.setHeaderValue("名前"); tc.setCellRenderer((t, value, isSelected, hasFocus, row, column) -> { var file = (File)value; var view = FileSystemView.getFileSystemView(); var icon = view.getSystemIcon(file); var label = new JLabel(file.getName(), icon, JLabel.LEFT); if(isSelected){ label.setOpaque(true); label.setBackground(new Color(0xCC, 0xCC, 0xFF)); } return label; }); } private static void setFileModifyRenderer(TableColumn tc){ tc.setHeaderValue("更新日時"); tc.setCellRenderer((t, value, isSelected, hasFocus, row, column) -> { var file = (File)value; var date = new Date(file.lastModified()); var format = new SimpleDateFormat("yyyy/MM/dd HH:mm"); var label = new JLabel(format.format(date)); if(isSelected){ label.setOpaque(true); label.setBackground(new Color(0xCC, 0xCC, 0xFF)); } return label; }); } private static void setFileTypeRenderer(TableColumn tc){ tc.setHeaderValue("種類"); tc.setCellRenderer((t, value, isSelected, hasFocus, row, column) -> { var file = (File)value; var label = new JLabel(); if(file.isDirectory()){ label.setText("DIR"); }else{ try{ var path = file.getCanonicalPath(); var index = path.lastIndexOf("."); label.setText(path.substring(index + 1, path.length()).toUpperCase() + "ファイル"); }catch(IOException e){ var path = file.getName(); var index = path.lastIndexOf("."); label.setText(path.substring(index + 1, path.length()).toUpperCase() + "ファイル"); } } if(isSelected){ label.setOpaque(true); label.setBackground(new Color(0xCC, 0xCC, 0xFF)); } return label; }); } private static void setFileSizeRenderer(TableColumn tc){ tc.setHeaderValue("サイズ"); tc.setCellRenderer((t, value, isSelected, hasFocus, row, column) -> { var file = (File)value; var size = file.length(); var label = new JLabel(); var count = 0; while(size > 2048){ size /= 1024; count++; } if(!file.isDirectory()){ label.setText("" + size + JFiler.FILE_SUFFIX[count]); } if(isSelected){ label.setOpaque(true); label.setBackground(new Color(0xCC, 0xCC, 0xFF)); } return label; }); } private static void setCellRenderer(JTable table){ var columnModel = table.getColumnModel(); JFiler.setFileNameRenderer(columnModel.getColumn(JFiler.FILE_NAME_COLUMN)); JFiler.setFileModifyRenderer(columnModel.getColumn(JFiler.FILE_MODIFY_COLUMN)); JFiler.setFileTypeRenderer(columnModel.getColumn(JFiler.FILE_TYPE_COLUMN)); JFiler.setFileSizeRenderer(columnModel.getColumn(JFiler.FILE_SIZE_COLUMN)); }