public class DownTaskTable extends JTable
{
private DownTaskTableModel downTaskTableModel;
private DownedItemInfoPanel mInfoPanel;
JPopupMenu jpop = new JPopupMenu();
JMenuItem open = new JMenuItem("打开目录");
public DownTaskTable(DownTaskModel downTaskModel, DownedItemInfoPanel mInfoPanel ,int type)
{
this.mInfoPanel = mInfoPanel;
init(downTaskModel,type);
jpop.add(open);
jpop.setUI(new MotifPopupMenuUI());
open.setUI(new BasicButtonUI());
open.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try {
int rowIndex = getSelectedRow();
final DownTaskItem downTaskItem = downTaskTableModel.getItemValue(rowIndex);
String filePath = downTaskItem.getFilePath();
System.out.println("filePath"+filePath);
String exec = "explorer /select, " + filePath;
Runtime.getRuntime().exec(exec);
System.out.println(exec);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
public JTable init(final DownTaskModel downTaskModel,int type)
{
SwingUtitle.setTableUI(this);
downTaskTableModel = new DownTaskTableModel(downTaskModel,type);
setModel(downTaskTableModel);
// 表可以被改变宽度,但不能拖走.
this.getTableHeader().setReorderingAllowed(false);
tableHeader.setBackground(new Color(227, 234, 240));
// 列的宽度控制.
TableColumnModel tc = this.getColumnModel();
// 状态列
tc.getColumn(0).setPreferredWidth(50);
tc.getColumn(0).setMinWidth(30);
// 文件名
tc.getColumn(1).setPreferredWidth(210);
tc.getColumn(1).setMinWidth(120);
// 进度
tc.getColumn(2).setPreferredWidth(70);
tc.getColumn(2).setMinWidth(30);
// 速度
tc.getColumn(3).setMinWidth(30);
// 剩余时间
tc.getColumn(4).setMinWidth(50);
// 用时
tc.getColumn(5).setMinWidth(50);
// 文件大小
tc.getColumn(6).setPreferredWidth(80);
tc.getColumn(6).setMinWidth(60);
tableHeader.setPreferredSize(new Dimension(780, 29));
Font LABEL_FONT = new Font("微软雅黑", Font.PLAIN, 16);
tableHeader.setFont(LABEL_FONT);
tableHeader.setForeground(PhoneView.LABEL_FONT_COLOR);
this.setRowHeight(37);
this.setFont(LABEL_FONT);
//监听器,当选择列时调用.用于显示任务信息.
DefaultListSelectionModel dlsm=(DefaultListSelectionModel)this.getSelectionModel();
//单选
dlsm.setSelectionMode(DefaultListSelectionModel.SINGLE_INTERVAL_SELECTION);
dlsm.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
//源.
ListSelectionModel lm=(ListSelectionModel)e.getSource();
if(e.getValueIsAdjusting())
{
//过滤一次响应.
return;
}
//得到被选择的行.
int rowIndex=lm.getLeadSelectionIndex();
int size = downTaskTableModel.getSize();
if (rowIndex < 0 || rowIndex >= size){
mInfoPanel.setDownTaskItem(null);
DownloadManangerView.pauseButton.setEnabled(false);
DownloadManangerView.startButton.setEnabled(false);
DownloadManangerView.deleteButton.setEnabled(false);
return;
}
DownTaskItem taskItem = downTaskTableModel.getItemValue(rowIndex);
if(taskItem.getStatus()==DownTaskItem.STATUS_RUN)
{
DownloadManangerView.pauseButton.setEnabled(true);
DownloadManangerView.startButton.setEnabled(false);
DownloadManangerView.deleteButton.setEnabled(true);
}else if(taskItem.getStatus()==DownTaskItem.STATUS_END)
{
DownloadManangerView.pauseButton.setEnabled(false);
DownloadManangerView.startButton.setEnabled(false);
DownloadManangerView.deleteButton.setEnabled(true);
}
else if(taskItem.getStatus()==DownTaskItem.STATUS_PAUSE)
{
DownloadManangerView.pauseButton.setEnabled(false);
DownloadManangerView.startButton.setEnabled(true);
DownloadManangerView.deleteButton.setEnabled(true);
}
//去数据库中查询
DbModel dbModel = new DbModel(DownModel.DB_TABLE_NAME,DownModel.DB_PATH);
List<Map<String, Object>> list = dbModel.query(taskItem.getUrl());
//只要将详细信息显示的条目重数据库中取出
if(null!=list && list.size()>0)
{
for(int i=0;i<list.size();i++)
{
Map<String, Object> map = list.get(i);
//简介
taskItem.setContent((String) map.get("CONTENT"));
taskItem.setFileName((String) map.get("FILENAME"));
}
}
else
{
PhoneSyncClient.getInstance().sendDownloadUrl(taskItem.getUrl());
}
mInfoPanel.setDownTaskItem(taskItem);
}
});
this.addMouseListener(new MouseAdapter() {
// 行内双击事件.
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 3)
return;// 过滤右键
if (e.getClickCount() == 2)// 得到鼠标双击事件.
{
int rowIndex = getSelectedRow();
// 得到被选择的行.这边可能就存到一个对象中去了
if (rowIndex < 0 || rowIndex >= downTaskTableModel.getSize())
{
mInfoPanel.setDownTaskItem(null);
DownloadManangerView.pauseButton.setEnabled(false);
DownloadManangerView.startButton.setEnabled(false);
DownloadManangerView.deleteButton.setEnabled(false);
return;
}
else
{
DownTaskItem downTaskItem = downTaskTableModel.getItemValue(rowIndex);
//如果下载任务的状态是正在下载则让其暂停.
if (downTaskItem.getStatus() == DownTaskItem.STATUS_RUN)
{
DownloadThreadMananger.getInstance(null).stop(downTaskItem);
// 暂停按钮被禁用.
DownloadManangerView.pauseButton.setEnabled(false);
downTaskItem.setStatus(DownTaskItem.STATUS_PAUSE);
DownloadManangerView.startButton.setEnabled(true);
}
//如果状态时暂停
else if(downTaskItem.getStatus()==DownTaskItem.STATUS_PAUSE)
{
downTaskItem.setStatus(DownTaskItem.STATUS_WAIT);
DownloadManangerView.pauseButton.setEnabled(true);
DownloadManangerView.startButton.setEnabled(false);
}
//完成状态
else if (downTaskItem.getStatus() == DownTaskItem.STATUS_END)
{
// 得到文件路径与文件名.
DownloadManangerView.pauseButton.setEnabled(false);
DownloadManangerView.startButton.setEnabled(false);
DownloadManangerView.deleteButton.setEnabled(false);
}
}
}
}
//行内右击事件.只在已经存在任务的行内有效.
public void mouseReleased(MouseEvent ex)
{
if (ex.getButton() != MouseEvent.BUTTON3)// 过滤左键.
return;
Point point = new Point(ex.getX(),ex.getY()); //获得坐标点,
final int row = rowAtPoint(point); //根据坐标点获得行的索引.
final DownTaskItem downTaskItem = downTaskTableModel.getItemValue(row);
requestFocus();//行获得焦点.
setRowSelectionInterval(row, row);
//准备弹出一个右键菜单.
jpop.show((Component)ex.getSource(), ex.getX(),ex.getY());
open.setEnabled(null!=downTaskItem);
}
});
//网格颜色.
this.setGridColor(new Color(192, 192, 192));
//表头.
JTableHeader downTableHeader= this.getTableHeader();
//表头有下边框
downTableHeader.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray);
downTableHeader.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
// //构造单元格的渲染器.
// DefaultTableCellRenderer dtc=new DefaultTableCellRenderer();
// //设置背景色与容器背景色一致.
// dtc.setBackground(new Color(227, 234, 240));
//将表头设置成此渲染器.
//downTableHeader.setDefaultRenderer(dtc);
this.setDragEnabled(false);
return this;
}
public void setType(int type){
downTaskTableModel.setType(type);
clearSelection();
}
/**
* 返回一个设置完成的JScrollPane
* @param table
* @return
*/
public static JScrollPane getJScrollPane(JTable table)
{
JScrollPane jScrollTable = new JScrollPane();
//滚动容器的基本设置
jScrollTable.setBackground(new java.awt.Color(255, 255, 255));
//设置水平的滚动条
jScrollTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
//设置垂直的滚动条
jScrollTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//滚动条没有边框.
jScrollTable.setBorder(BorderFactory.createEmptyBorder());
jScrollTable.getVerticalScrollBar().setUI(new MyScrollBarUI());
//表格所在的滚动容器背景色.
jScrollTable.setBackground(new Color(226, 238, 249));
//载入表格.
jScrollTable.setViewportView(table);
//抛出滚动容器.
return jScrollTable;
}
}
分享到:
相关推荐
在标题"java swing 表头不可拖动"中,提到的问题是关于如何在Java Swing应用中阻止JTable的列头进行拖动操作。这通常是通过自定义JTable或其相关的HeaderView来实现的。在Swing中,JTable的表头(表头即列头)是由...
本文将深入探讨如何使用Java Swing进行串口通信,以及涉及的相关技术。 首先,串口通信是一种古老的通信方式,但至今仍广泛应用于各种硬件设备的通信,如打印机、GPS模块、温度传感器等。在Java中,我们可以使用`...
Java Swing是Java标准库中的一个组件集合,用于构建桌面应用程序用户界面。它是Java Foundation Classes (JFC)的一部分,提供了一套轻量级的GUI(图形用户界面)组件,支持丰富的交互功能。本离线API文档详细阐述了...
本篇文章将详细讲解如何在Java Swing中读取和显示图片,以及与之相关的知识点。 首先,我们需要了解Java中的图像处理类。`java.awt.Image`类是表示图像的基本类,它提供了加载、显示和操作图像的方法。而`javax....
这个压缩包“java swing漂亮软件界面 超酷 以及javaswing教程.rar.rar”很可能包含了一系列关于如何使用Java Swing创建美观、酷炫界面的教程和示例代码。 在Java Swing中,开发者可以使用各种组件来构建应用,如...
在Java Swing中实现PDF阅读器是一项技术挑战,涉及到对PDF文件格式的理解、IO操作、Swing组件的使用以及可能的第三方库集成。 PDF(Portable Document Format)是一种广泛使用的文件格式,用于存储文档,包括文本...
Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它提供了一系列丰富的组件,用于创建桌面应用程序。在Swing中,DatePicker是一个非常实用的控件,允许用户方便地选择日期,通常用于输入或显示日期相关的...
### Java Swing JTable 分页实现详解 #### 一、引言 在开发基于Java Swing的应用程序时,我们经常需要处理大量的数据展示问题。对于表格形式的数据展示,`JTable`是一个非常常用且强大的组件。然而,当数据量过大时...
【Java Swing 文件上传和下载聊天室】是一个使用Java Swing库构建的本地客户端-服务器应用程序,它允许用户进行实时聊天并交换文件。这个项目的核心技术包括Java的网络编程、图形用户界面设计以及文件处理。 首先,...
- **社区资源**:Stack Overflow、GitHub 等平台上有大量的 Swing 相关问题解答和示例代码。 - **在线课程**:Coursera、Udemy 等网站提供了关于 Swing 的课程。 通过上述内容的学习,读者能够深入了解 Java Swing ...
7. **文件操作**:可能包含数据库配置文件(如db.properties)或日志文件的读写,这些操作可以通过Java的File类和相关的I/O流实现。 8. **异常处理**:在处理数据库连接、文件操作或网络请求时,可能会遇到异常。...
Java Swing 是Java GUI(图形用户界面)库的一部分,主要用于创建桌面应用程序。在Java Swing中,我们可以通过Java Media Framework (JMF) 或者更现代的JavaFX来实现调用本地摄像头的功能。下面将详细介绍如何在Java...
在“Swing_Chapter05”这个文件中,很可能包含了与这些组件相关的示例代码和教程,可以帮助你更好地理解和实践如何在Java Swing中使用这些组件。通过实际编写和运行这些例子,你可以掌握Swing组件的基本用法,提升...
在本项目"JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现"中,开发者可能已经创建了一个Java Swing应用程序,该应用具有用户界面,允许用户进行数据操作。这些操作可能包括添加、删除、更新数据库记录。...
在IT行业中,Java Swing是一个用于构建桌面应用程序的Java库,它是Java Foundation Classes (JFC)的一部分。Swing提供了丰富的组件和API,使开发者能够创建功能强大的图形用户界面(GUI)。在给定的场景中,我们关注...
Java Swing电子相册管理系统是一个基于面向对象思想设计的桌面应用程序,它允许用户管理和查看他们的照片集合。Swing是Java提供的一种用于创建图形用户界面(GUI)的库,它提供了丰富的组件和工具,使得开发者可以...
这个“java swing小程序”压缩包很可能包含了一些示例代码,可以帮助初学者或者开发者更好地理解和掌握Java Swing的相关知识。下面将详细讨论Java Swing的主要组件、特性以及如何通过这些小程序进行学习。 Java ...
Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。在Swing中,多选下拉框通常由JComboBox类实现,但默认的JComboBox只支持单选。为了实现多选功能,我们需要扩展JComboBox或者使用第三方库,如JList...
下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础,它是顶级容器,用于容纳其他组件。在这个项目中,一个JFrame被用来创建画图板窗口。 2. **JPanel**:JPanel...