?? jzjtable.java
字號:
package org.jr.jzj;
/**
* <p>Copyright: Copyright (c) 2002-2003</p>
* <p>Company: JavaResearch(http://www.javaresearch.org)</p>
* <p>最后更新日期:2003年1月9日
* @author Cherami,Barney,Brain
* @version 0.8
*/
import java.util.prefs.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.*;
import org.jr.swing.table.*;
/**
* 顯示壓縮包內容的表格。
*/
public class JZJTable
extends JTable {
private static JZJLogger logger = new JZJLogger(JZJTable.class);
TableColumnModel columnModel; //列模型
int selectedCount = 0; //選中行數
long selectedTotalSize = 0; //選中文件的總的大小
protected SortableColumnHeaderRenderer headerRenderer; //表格頭渲染器
Preferences preference = JZipJar.preference;
private static final int[] preferredWidth = {
150, 60, 60, 30, 140, 50, 300};
JZJTableModel model;
/**
* 構造方法,完成表格的初始化以及各列的寬度的重新設置。
* @param model 表格模型
*/
public JZJTable(JZJTableModel model) {
super(model);
columnModel = getColumnModel();
this.model = model;
setDefaultRenderer(Long.class, new ReadableSizeCellRenderer(false, false));
setDefaultRenderer(Float.class, new PercentCellRenderer());
setDefaultRenderer(Date.class, new DateCellRenderer());
setShowGrid(preference.getBoolean("showgridline", true));
setRowSelectionAllowed(preference.getBoolean("fulllineselect", true));
resize();
}
/**
* 設置表格頭部的渲染器。
* <p>由于表格本身是具有排序功能的,表格頭應該顯示排序列的狀態,因此需要使用自定義的表格頭渲染器
*/
public void setHeader() {
JTableHeader header = getTableHeader();
headerRenderer = new SortableColumnHeaderRenderer( (JZJTableModel) getModel(),
header.getDefaultRenderer());
int columnCount = columnModel.getColumnCount();
for (int i = 0; i < columnCount; i++) {
TableColumn column = columnModel.getColumn(i);
column.setHeaderRenderer(headerRenderer);
}
}
/**
* 設置表格頭的事件監聽器。
* <p>監聽表格頭的鼠標點擊事件,只有在點擊的表格頭是有效的表格頭并且點擊一次時才進行排序,
* 否則清除排序狀態。
*/
public void addHeaderListener() {
getTableHeader().addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
JTableHeader header = (JTableHeader) (event.getSource());
int column = header.columnAtPoint(event.getPoint());
initSelectedStatus();
if (event.getClickCount() == 1 && column != -1) {
if (column == model.getSortColumn()) {
model.sortByColumn(column, !model.getSortOrder());
}
else {
model.sortByColumn(column, true);
}
}
else {
model.clearSort();
}
}
});
}
/**
* 表格的內容發生變化時設置進行重新設置。
* <p>需要調用父類的tableChanged方法完成一般的功能,并且要將相關的選中信息清除掉。
* @param e 表格模型改變事件
*/
public void tableChanged(TableModelEvent e) {
super.tableChanged(e);
selectedCount = 0;
selectedCount = 0;
//resize();
}
/**
* 重新設置表格各列的相對寬度
*/
public void resize() {
if (columnModel == null) {
return;
}
for (int i = 0; i < model.getColumnCount(); i++) {
columnModel.getColumn(i).setPreferredWidth(preferredWidth[i]);
}
}
/**
* 得到指定行的項目名。
* <p>包括相對路徑名和文件名
* @param row 查詢的行號
* @return 指定行的項目名
*/
public String getEntryName(int row) {
return ( (JZJTableModel) getModel()).getEntryName(row);
}
/**
* 得到表格代表的壓縮包中的總的項目數。
* @return 表格代表的壓縮包中的總的項目數
*/
public int getEntryCount() {
return ( (JZJTableModel) getModel()).getRowCount();
}
/**
* 得到指定行的記錄。
* @param row 查詢的行號
* @return 指定行的記錄
*/
public JZJFileRecord getEntry(int row) {
return ( (JZJTableModel) getModel()).getEntry(row);
}
/**
* 得到選中的總行數。
* @return 選中的總行數
*/
public int getSelectedEntryCount() {
return selectedCount;
}
/**
* 得到選中的所有項目代表的文件的總的大小。
* @return 選中的所有項目代表的文件的總的大小
*/
public long getSelectedTotalSize() {
return selectedTotalSize;
}
/**
* 得到指定行所代表的文件的文件大小。
* @param row 查詢的行號
* @return 指定行所代表的文件的文件大小
*/
public long getSelectedSize(int row) {
return ( (JZJTableModel) getModel()).getEntrySize(row);
}
/**
* 選中狀態發生變化時的處理。
* <p>重新計算選中的總行數和總的大小
* @param e 選中事件
*/
public void valueChanged(ListSelectionEvent e) {
super.valueChanged(e);
int[] rows = getSelectedRows();
selectedCount = rows.length;
selectedTotalSize = 0;
for (int i = 0; i < rows.length; i++) {
selectedTotalSize = selectedTotalSize + getSelectedSize(rows[i]);
}
}
/**
* 初始化選中狀態為0。
*/
protected void initSelectedStatus() {
selectedCount = 0;
selectedTotalSize = 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -