package org.crazyit.mysql.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import org.crazyit.mysql.object.GlobalContext;
import org.crazyit.mysql.object.ViewObject;
import org.crazyit.mysql.object.list.AbstractData;
import org.crazyit.mysql.object.list.ProcedureData;
import org.crazyit.mysql.object.list.TableData;
import org.crazyit.mysql.object.list.ViewData;
import org.crazyit.mysql.object.tree.ConnectionNode;
import org.crazyit.mysql.object.tree.Database;
import org.crazyit.mysql.object.tree.ProcedureNode;
import org.crazyit.mysql.object.tree.RootNode;
import org.crazyit.mysql.object.tree.ServerConnection;
import org.crazyit.mysql.object.tree.TableNode;
import org.crazyit.mysql.object.tree.ViewNode;
import org.crazyit.mysql.ui.list.ListCellRenderer;
import org.crazyit.mysql.ui.tree.TreeCellRenderer;
import org.crazyit.mysql.ui.tree.TreeListener;
import org.crazyit.mysql.util.MySQLUtil;
/**
* 管理器的主界面
*
* @author yangenxiong yangenxiong2009@gmail.com
* @version 1.0
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br>Copyright (C), 2009-2010, yangenxiong
* <br>This program is protected by copyright laws.
*/
@SuppressWarnings("serial")
public class MainFrame extends JFrame {
//主界面的分隔Pane
private JSplitPane mainPane;
//树的JScrollPane
private JScrollPane treePane;
//主界面的连接树, 树的第一层子节点是各个连接,第二层子节点是该连接下的数据库列表,
//第三层子节点是表、视图等
private JTree tree;
//树的Model
private DefaultTreeModel treeModel;
//JList的JScrollPane
private JScrollPane dataPane;
//表、视图等存放的JList
private JList dataList;
//空的数据
private Object[] emptyData = new Object[]{};
//工具栏
private JToolBar toolBar = new JToolBar();
//新连接界面
private ConnectionFrame connectionFrame;
//新建数据库界面
private DatabaseFrame databaseFrame;
//新连接
private Action newConnection = new AbstractAction("新连接", new ImageIcon("images/connection.gif")) {
public void actionPerformed(ActionEvent e) {
newConnection();
}
};
//表
private Action table = new AbstractAction("表", new ImageIcon("images/table.gif")) {
public void actionPerformed(ActionEvent e) {
viewTables();
}
};
//视图
private Action view = new AbstractAction("视图", new ImageIcon("images/view.gif")) {
public void actionPerformed(ActionEvent e) {
viewViews();
}
};
//存储过程
private Action procedure = new AbstractAction("存储过程", new ImageIcon("images/procedure.gif")) {
public void actionPerformed(ActionEvent e) {
viewProcedures();
}
};
//查询
private Action query = new AbstractAction("查询", new ImageIcon("images/query.gif")) {
public void actionPerformed(ActionEvent e) {
query();
}
};
//弹出菜单
JPopupMenu menu = new JPopupMenu();
//表的菜单
private JMenuItem addTableItem = new JMenuItem("新建表", new ImageIcon("images/add-table.gif"));
private JMenuItem editTableItem = new JMenuItem("编辑表", new ImageIcon("images/edit-table.gif"));
private JMenuItem deleteTableItem = new JMenuItem("删除表", new ImageIcon("images/delete-table.gif"));
private JMenuItem dumpTableItem = new JMenuItem("导出表", null);
private JMenuItem refresh = new JMenuItem("刷 新", new ImageIcon("images/refresh.gif"));
//视图菜单
private JMenuItem addViewItem = new JMenuItem("新建视图", new ImageIcon("images/add-view.gif"));
private JMenuItem editViewItem = new JMenuItem("编辑视图", new ImageIcon("images/edit-view.gif"));
private JMenuItem dropViewItem = new JMenuItem("删除视图", new ImageIcon("images/delete-view.gif"));
//存储过程菜单
private JMenuItem addProcedureItem = new JMenuItem("新建存储过程", new ImageIcon("images/add-procedure.gif"));
private JMenuItem editProcedureItem = new JMenuItem("编辑存储过程", new ImageIcon("images/edit-procedure.gif"));
private JMenuItem dropProcedureItem = new JMenuItem("删除存储过程", new ImageIcon("images/delete-procedure.gif"));
//树的弹出菜单
JPopupMenu treeMenu = new JPopupMenu();
private JMenuItem closeConnection = new JMenuItem("关闭连接", null);
private JMenuItem removeConnection = new JMenuItem("删除连接", null);
private JMenuItem closeDatabase = new JMenuItem("关闭数据库", null);
private JMenuItem newDatabase = new JMenuItem("新建数据库", null);
private JMenuItem removeDatabase = new JMenuItem("删除数据库", null);
private JMenuItem executeSQLFile = new JMenuItem("执行SQL文件", null);
private JMenuItem dumpSQLFile = new JMenuItem("导出SQL文件", null);
//全局上下文对象
private GlobalContext ctx;
//当前列表前所显示数据种类
private ViewObject currentView;
public MainFrame(GlobalContext ctx) {
this.ctx = ctx;
//初始化树对象
createTree();
this.treePane = new JScrollPane(this.tree);
//初始化表、视图的JList
this.dataList = createList();
this.dataPane = new JScrollPane(dataList);
this.dataPane.setPreferredSize(new Dimension(600, 400));
this.mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, this.treePane,
this.dataPane);
this.mainPane.setDividerLocation(170);
this.add(this.mainPane);
//创建工具栏
createToolBar();
this.add(this.toolBar, BorderLayout.NORTH);
this.setLocation(150, 100);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("MySQL管理器");
//初始化各个界面
this.connectionFrame = new ConnectionFrame(this.ctx, this);
initMenuItemListeners();
}
//初始化右键菜单
private void initMenuItemListeners() {
this.addTableItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
newTable();
}
});
this.editTableItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
editTable();
}
});
this.deleteTableItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dropTable();
}
});
this.dumpTableItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dumpTable();
}
});
this.addViewItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
newView();
}
});
this.editViewItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
editView();
}
});
this.dropViewItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dropView();
}
});
this.addProcedureItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
newProcedure();
}
});
this.editProcedureItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
editProcedure();
}
});
this.dropProcedureItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
dropProcedure();
}
});
this.refresh.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
refreshDataList();
}
});
this.closeConnection.addActionListener(new ActionListener(){
疯狂Java讲义(第二版)源代码
在编程语言的学习之路上,Java无疑是众多开发者的必经之路,而《疯狂Java讲义(第二版)》这本书,便是无数Java学习者心中的经典。这本书的作者李刚,以其多年积累的编程经验和独特的“疯狂教学”方式,带给我们深入浅出、生动有趣的Java学习体验。而书中的源代码,则是将理论知识与实践操作紧密结合的桥梁,极大地丰富了我们的学习资源。 源代码作为学习资料的重要性不言而喻。它不仅为初学者提供了一个直观的示例,帮助他们理解书中抽象的概念和复杂的逻辑,也为有一定基础的开发者提供了更高级的编程技巧和最佳实践的参考。在《疯狂Java讲义(第二版)》中,源代码按照章节顺序整齐排列,每一章的代码都是作者精心挑选和设计的,以确保读者可以在阅读教材的同时,获得充分的练习和实践。 比如,在第五章“基础语法、数据类型、控制结构”中,源代码以最简洁的方式展示了Java的基本元素,帮助初学者快速建立编程的初步概念。到了第七章“类和对象的创建,封装、继承和多态”,代码进一步引导读者去探索面向对象编程的核心概念,这无疑是学习Java过程中的一大飞跃。在理解了这些基本概念后,读者将有能力去编写更加复杂的程序。 随着章节的推进,我们会接触到更加复杂和高级的内容。例如,在第13章和第14章中可能包含了集合框架、IO流、多线程或者异常处理等内容,这些都是Java编程中不可或缺的重要组成部分。而到了第10章和第11章,书中可能涵盖了Java SE的进阶特性,如反射、注解、Lambda表达式等,这些高级主题的源代码将帮助读者深入理解并学会在实际编程中运用这些功能。 除了单章的知识点,书中还可能包含了“project_codes”这样的综合性项目案例目录,这样的案例将之前章节的知识点串联起来,帮助读者进行综合应用和实践。这不仅仅是简单地运用之前学到的单个知识点,而是将它们融会贯通,解决实际问题。 每一份源代码都是作者李刚对Java编程深入理解的体现。它们不仅为读者提供了从基础到进阶的学习路径,还以最直接的方式展示了如何编写高效、健壮的程序,以及如何避免常见的编程陷阱。这些代码的实践操作,将帮助读者更深刻地体会到Java语言的强大功能和灵活性,从而提升自身的编程实践能力。 通过阅读和实际编写《疯狂Java讲义(第二版)》中的源代码,无论是刚开始接触Java的新手,还是已经在编程领域有一定经验的开发者,都能够从中获得宝贵的学习体验。这些源代码不仅是一份资料,更是通往成为高级Java开发者的阶梯。通过亲自动手实践这些代码,读者能够更深入地理解Java的精髓,将理论知识转化为实践能力,最终实现从新手到“疯狂Java”修炼者的蜕变。
- 1
- 2
- 3
- 4
- 5
- 6
- 20
- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- yarou20102015-03-23其实和第一版的源代码大意差不多,有第一版的话也就够了,只是这一版针对java7修改了一些bug
- nuannuan-12013-07-19我从来没接触过java,想下载教材,但是下下来的不是,对我没用,可能对别人有用吧,感觉被骗了。略不爽!还是谢谢上传者的share
- agppp2013-09-28很好,和书上的光盘一样
- Actan2013-09-24不错,很方便,谢谢分享!!
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【IT教程网】18.第5章网络_SSH.wmv
- 【IT教程网】D11_04_创建GUI_使用Django_1.wmv
- 【IT教程网】D08_04_操作系统_PyInotify.wmv
- 文件写入失败异常解决办法.md
- 【IT教程网】11.第3章文本_ElementTree.wmv
- 【IT教程网】D11_06_创建GUI_使用Django_3.wmv
- 【IT教程网】D12_02_数据持久性_简单序列化_shelve.wmv
- 【IT教程网】D12_03_数据持久性_简单序列化_YAML.wmv
- 【IT教程网】29.第8章操作系统什锦_Python中跨平台的UNIX编辑(三).wmv
- 【IT教程网】23.第6章数据(四)_合并数据.wmv
- 【IT教程网】D12_01_数据持久性_简单序列化_Pickle.wmv
- 【IT教程网】D12_06_数据持久性_关系序列化_SQLAlchemy.wmv
- 【IT教程网】6.第3章文本_Python字符串及内建功能函数.wmv
- wireshark4.2版本,s7 comm plus插件
- 【IT教程网】D12_05_数据持久性_关系序列化_StormORM.wmv
- 【IT教程网】D12_04_数据持久性_简单序列化_ZODB.wmv