1、 主界面的搭建
效果图:
分析:界面的工具栏是一个JToolBar,导航栏是一个JTree、资源列表为JTable、资源信息列表为JList。注意:这些都不是简单的拖控件式是现代的而是写代码的哦。
下面是部分主要代码:
public void createMainFrame() {
// TODO Auto-generated method stub
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
// 导航滚动
JScrollPane navPane = new JScrollPane(navTree);
JScrollPane downloadPane = new JScrollPane(downloadTable);
int downloadPaneHeight = (int) (screen.height / 1.5);
int downloadPaneWidth = (int) (screen.width / 0.8);
downloadPane.setPreferredSize(new Dimension(downloadPaneWidth,
downloadPaneHeight));
JScrollPane infoPane = new JScrollPane(infoJList);
// 主界面右边的分隔Pane
JSplitPane rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
downloadPane, infoPane);
rightPane.setDividerLocation(500);
rightPane.setDividerSize(3);
// 主界面的分隔Pane
JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
navPane, rightPane);
mainPane.setDividerSize(3);
mainPane.setDividerLocation((int) (screen.width / 5.5));
this.add(mainPane);
this.setPreferredSize(new Dimension(screen.width, screen.height - 30));
this.setVisible(true);
this.setTitle("多线程下载工具");
}public static void main(String[] args) {
// TODO Auto-generated method stub
MainFrame mFrame = new MainFrame();
mFrame.createTree();//调用创建导航树的方法。
mFrame.createTable();
mFrame.createList();
mFrame.createBar();
mFrame.createMainFrame();
}
/**
* 创建左边的导航树列表:正在下载、下载失败、下载完成
*
* @author Administrator
*/
public void createTree() {
// TODO Auto-generated method stub
// 实例化各个节点(任务节点、正在下载节点、下载失败节点、下载完成节点)
DownloadRootNode taskNode = new DownloadRootNode();
DownloadingNode downloadingNode = new DownloadingNode();
DownloadFailNode failNode = new DownloadFailNode();
DownloadFinishNode finishNode = new DownloadFinishNode();
// 根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
DefaultMutableTreeNode tn = new DefaultMutableTreeNode(taskNode);
root.add(tn);
// 创建各个节点并且将各个节点添加到任务节点的子节点中
tn.add(new DefaultMutableTreeNode(downloadingNode));
tn.add(new DefaultMutableTreeNode(failNode));
tn.add(new DefaultMutableTreeNode(finishNode));
this.navTree = new NavigationTree(root);
// navTree.setCellRenderer(new NovigationTreeCellRender());
}
NavigationTree类:设置导航树的相关信息(根节点的隐藏、渲染器等)界面上的文字及图片等都是通过渲染器来渲染上去的。
public class NavigationTree extends JTree {
public NavigationTree(DefaultMutableTreeNode root) {
// TODO Auto-generated constructor stub
super(root);
this.setRootVisible(false);
this.setShowsRootHandles(true);
this.setCellRenderer(new NavigationTreeCellRender());//为每一个节点设置渲染器
//展开第一层节点
for (int i = 0; i < root.getChildCount(); i++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)root.getChildAt(i);
this.expandPath(new TreePath(node.getPath()));
}
}
}
渲染器的实现:
public class NavigationTreeCellRender extends DefaultTreeCellRenderer
implements TreeCellRenderer
{
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
// TODO Auto-generated method stub
super.getTreeCellRendererComponent(tree, value, sel,expanded,leaf, row, hasFocus);
// 得到树节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
// 得到节点对象
DownloadNode obj = (DownloadNode) node.getUserObject();
// 设置文本和图片
if (obj != null) {
this.setIcon(obj.getImageIcon());
this.setText(obj.getText());
}
return this;
}
}
到这里,左边导航树基本已经实现,其他的实现思路基本一致,
这里可能说的不是很清楚,后续会继续更新,最后昨完了本人会把完整的源代码上传。