标签:

接着上篇文章

接下来说下程序右侧的文件内容表格如何实现

FileTable类:

FileTable基础于JTable类,构造函数里用setDefaultRenderer设置每行默认的渲染器为FileTableCellRenderer(下面会说如何实现)

setAutoCreateRowSorter(true)函数自动创建一个默认的排序筛选器,等同于:setRowSorter(new TableRowSorter(model))

RowSorter:默认情况下,如果启用排序,那么排序时 JTable 将保留基于模型的选择和可变行高度。例如,如果当前选择行 0(就底层模型而言),那么排序之后将选择行 0(就底层模型而言)。选择有可能看起来被更改了,但就底层模型而言它仍然保持不变。模型索引不再可见或者被移除时除外。例如,如果行 0 被过滤掉了,那么选择在排序后将为空。

this.setShowHorizontalLines(false);和this.setShowVerticalLines(false);设置表格中不绘制单元格周围的横向和纵向网格线

package FileTable;

import java.awt.Dimension;

import java.io.File;

import java.util.Comparator;

import javax.swing.JTable;

import javax.swing.table.TableModel;

/**

* Created by Administrator on 2016/3/29.

*/

public class FileTable extends JTable {

/**

*

*/

private static final long serialVersionUID = 1L;

public FileTable(){

this.setDefaultRenderer(Object.class, new FileTableCellRenderer());

this.setAutoCreateRowSorter(true);

this.getTableHeader().setReorderingAllowed(false);

this.setShowHorizontalLines(false);

this.setShowVerticalLines(false);

setIntercellSpacing(new Dimension(0,0)); //修改单元格间隔,因此也将影响网格线的粗细。

setRowMargin(0);//设置相邻两行单元格的距离

}

@Override

public void setModel(TableModel dataModel) {

super.setModel(dataModel);

}

}

FileTableCellRenderer类:

FileTableCellRenderer继承与TableCellRenderer ,返回用于绘制单元格的组件。此方法用于在绘制前适当地配置渲染器。

主要目的是重载getTableCellRendererComponent(),里面根据不同列,显示不同数据。如第0列显示文件图标和文件名,第二列显示文件修改时间,第三列显示文件类型,第四列显示文件大小

package FileTable;

import java.awt.Component;

import java.io.File;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JLabel;

import javax.swing.JTable;

import javax.swing.filechooser.FileSystemView;

import javax.swing.table.TableCellRenderer;

/**

* Created by Administrator on 2016/3/29.

*/

public class FileTableCellRenderer extends JLabel implements TableCellRenderer {

private static final long serialVersionUID = 1L;

FileSystemView fileSystemView = FileSystemView.getFileSystemView();

@Override

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

this.setFont(table.getFont());

setOpaque(true);

setEnabled(table.isEnabled());

if (isSelected) {

this.setBackground(table.getSelectionBackground());

this.setForeground(table.getSelectionForeground());

// fileTable.setShowHorizontalLines(true);

// fileTable.setShowVerticalLines(true);

}

else {

this.setBackground(table.getBackground());

this.setForeground(table.getForeground());

// fileTable.setShowHorizontalLines(false);

// fileTable.setShowVerticalLines(false);

}

if (column == 0) {

File file = (File) value;

this.setText(fileSystemView.getSystemDisplayName(file));

this.setIcon(fileSystemView.getSystemIcon(file));

}

else if (column == 1) {

long datetime = (long)value;

SimpleDateFormat sdf = new SimpleDateFormat(" yyyy/MM/dd/ HH:mm:ss");

Date date = new Date(datetime);

this.setText(sdf.format(date));

this.setIcon(null);

} else if (column == 2) {

String description = (String)value;

this.setText(description);

this.setIcon(null);

} else if (column == 3) {

long size = (long)value;

String fileSize = FormetFileSize(size);

File file = (File)table.getValueAt(row,0);

if (fileSystemView.isComputerNode(file) || fileSystemView.isDrive(file) || file.isDirectory()){

this.setText(null);

} else {

this.setText(fileSize);

}

this.setIcon(null);

}

return this;

}

public String FormetFileSize(long fileS) {//转换文件大小

DecimalFormat df = new DecimalFormat("#.00");

String fileSizeString = "";

if (fileS == 0){

return fileSizeString;

}

if (fileS < 1024) {

fileSizeString = df.format((double) fileS) + "B";

} else if (fileS < 1048576) {

fileSizeString = df.format((double) fileS / 1024) + "K";

} else if (fileS < 1073741824) {

fileSizeString = df.format((double) fileS / 1048576) + "M";

} else {

fileSizeString = df.format((double) fileS / 1073741824) +"G";

}

return fileSizeString;

}

}

FileTableModel 类:

FileTable继承与DefaultTableModel类

静态变量tableHeader 存储的是表格标题

DefaultTableModel有4种构造函数, 这里我选择第三种,通过数据的二维数组和表头数组来初始化

DefaultTableModel,它是一个零列零行的表。

构造一个具有 rowCount 行和 columnCount 列的 null 对象值的 DefaultTableModel。

DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。

Object[] columnNames, int rowCount)

构造一个 DefaultTableModel,它的列数与 columnNames 中元素的数量相同,并具有 rowCount 行 null 对象值。

Vector columnNames, int rowCount)

构造一个 DefaultTableModel,它的列数与 columnNames 中元素的数量相同,并具有 rowCount 行 null 对象值。

DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。

通过重载getValueAt()函数,返回对应行列的值。重载CellEditable() 试其返回false 让表格内容不能被编辑。

package FileTable;

import java.io.File;

import javax.swing.filechooser.FileSystemView;

import javax.swing.table.DefaultTableModel;

/**

* Created by Administrator on 2016/3/29.

*/

public class FileTableModel extends DefaultTableModel {

private static final long serialVersionUID = 1L;

private static String[] tableHeader = {"名称", "修改日期", "类型", "大小"};

private FileSystemView fileSystemView = FileSystemView.getFileSystemView();

public FileTableModel(Object[][] objects){

super(objects, tableHeader);

}

@Override

public boolean isCellEditable(int row, int column) {

return false;

}

@Override

public Object getValueAt(int row, int column) {

File file = (File) super.getValueAt(row, column);

if (column == 0){

return file;

} else if (column == 1){

return file.lastModified();

} else if (column == 2) {

return fileSystemView.getSystemTypeDescription(file);

} else if (column == 3){

return file.length();

}

return super.getValueAt(row, column);

}

}

标签:

java写一个文件浏览器_【Java】 实现一个简单文件浏览器(2)相关推荐

  1. java写病毒程序代码_一个用JAVA写的清除EXE病毒文件的程序(转)

    Clear.java 这是一个主类,主要是负责运行程序和参数检查,不是核心 程序代码: import java.io.*; public class Clear{ public static void ...

  2. 如果java使用什么声明类_如果声明一个类时使用abstract修饰符,则表明该类是()_学小易找答案...

    [简答题]用 find 命令查找 /tmp 目录下以 vmlinuz 开头及大小超过 1M 的文件. [单选题]可以用 ( ) 来声明游标 [单选题]( )若用如下的SQL语句创建了一个SC表:CRE ...

  3. jmap 文件解析_[Java基础] 使用JMAP dump及分析dump文件

    http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/ 其中jmap是java自带的工具 查看整个JVM内存状 ...

  4. java 使用适当的签名_关于数字签名和policy文件设置!

    目前做一项目,jbuilder4+oracle+windows2000(linux),打算用applet+servlet 做成分布式b/s结构, 其中有两个关键技术难点: 1:与word,excel等 ...

  5. mkdir cd 创建并进入文件夹,创建并进入目录,只写一遍目录名, `$_`获取最后一个参数, 笔记221108

    mkdir -p /x/y/z ; cd $_ mkdir -p dirName ; cd $_ mkdir -p folderName;cd $_ 创建并进入文件夹的通常方法是先创建文件夹再进入文件 ...

  6. java线程读写互相影响_求助。多线程读取文件相互影响

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 for(.......) { new Thread(new Runnable(){ @Override public void run() { //读取文 ...

  7. java中支持mp3格式_可以播放mp3格式文件的机器,都遵守了什么协议,才能让mp3格式的文件可以:“一处保存,到处播放?...

    //题主修改了问题,第一段的立场就有点奇怪了 >_<.> //不是mp3格式去适应各种机器的,是各种机器按照mp3规范通过硬件或软件去解码mp3格式的文件,然后经过DAC(数字-&g ...

  8. java 伪装浏览器_[Java教程]伪装虽易测试不易之微信浏览器

    [Java教程]伪装虽易测试不易之微信浏览器 0 2014-04-03 20:00:38 前言     众所周知,微信项目html5界面的开发时间会相对较长(为什么这么说就不解释了),以及在微信浏览器 ...

  9. java中的jsp文件创建_在JSP中创建文件夹和文件

    在JSP中判断某文件是否存在,并创建文件夹和文件. 备忘. 在WinXP + Tomcat5.1 中,代码如下: //得到web根路径//绝对路径 //getServletContext().getR ...

  10. java播放器使用教程_[Java教程]Java音乐播放器

    [Java教程]Java音乐播放器 0 2016-01-07 12:00:09 乐乐音乐目前是基于musique开发的一个java音乐播放器,之前开发了一个android版本的音乐播放器,现在把and ...

最新文章

  1. android 蓝牙低耗能(LBE)技术介绍
  2. 字符串去掉两端的引号_Python3.7知其然知其所以然-第六章 字符串
  3. JavaScript(15)jQuery 选择器
  4. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
  5. 华为鸿蒙os手机图片,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  6. 玩转算法面试-第三章
  7. Simulink之三相桥式全控整流电路
  8. 《机器学习实战》程序清单3-4 创建树的函数代码
  9. idea前进和后退快捷键_PR快捷键大全(喜欢记得收藏!)
  10. 【Django 2021年最新版教程11】数据库删除操作
  11. 拥有mac动态壁纸Backgrounds——让桌面更生动
  12. vue项目中Echarts两个图表之间连接两条线
  13. 干货 | 京东云弹性伸缩功能实践
  14. tomcat两种启动方式
  15. js正则表达式验证大于0的整数
  16. Vue3 中还处在实验性阶段 Suspense 是个啥?
  17. 学习linux能有什么用
  18. Apche Phoenix,Spark的绝配搭档
  19. Ubuntu系统装上了以后应该干什么?
  20. Mr.绵羊的知识星球

热门文章

  1. 计算机cpu风扇关闭,cpu风扇怎么关闭
  2. python定积分1002无标题_python 求定积分和不定积分
  3. Docker MSSQL 添加读取 MDF 文件
  4. iOS 获取照相机实时预览图片
  5. java获得程序运行时间_java中获得程序运行时间的方法(转)
  6. Sublime text3 高级操作(直接上代码,超爽。)
  7. 录屏软件OBS录屏时噪声大的解决办法
  8. Java实现:房贷计算器 (关键词:公积金、首付、等额本息、等额本金)
  9. 计算机专业python毕业设计题目_计算机专业,毕业设计的选题?
  10. ai替换混合轴例子_可解释的vs可解释的AI:一个直观的例子