マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

すっきりさせる

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));
    }