Swing JTree登陆后动态加载

wuer0520 2014-02-26 02:21:58
在做一个桌面的程序,有一个主页面和一个登陆页面,主页面有一个菜单栏一个工具栏,工具栏下面有一个左面的JPanel和一个右面的JPanel,左面的JPanel里面有个JTree,右面的JPanel里面是左面的JTree单击后动态显示的内容,登陆页面显示在主页面前面是模态的,点击登陆后想动态的加载主页面里的JTree,但是点击登陆后这个JTree就显示不出来了

这个为什么不能上传项目进来让大家看啊,代码一个类一个类的稍微有点多啊

package com.bvtc.mdi.window;

import java.awt.BorderLayout;

/**
*
* @author wangjing 该类是主窗口
*
*/
public class IndexWindow extends JFrame {

/**
* 构造方法
*
* @param loginWindow
* 登录窗口
*
* 初始化主窗口
*/
public IndexWindow() {
// 设置窗口标题
this.setTitle("MySql Data Insert");
// 获取窗口左上角显示图标
BufferedImage iconImage = null;
try {
iconImage = ImageIO.read(IndexWindow.class.getClassLoader()
.getResource("image/icon.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
// 设置窗口的左上角图标
this.setIconImage(iconImage);
// 设置窗口大小和位置
this.setBounds(200, 100, 800, 600);
// 设置窗口打开时最大化,这样设置之后打开后窗口是最大化,按缩小就会缩小到setBounds的设置参数
// this.setExtendedState(JFrame.MAXIMIZED_BOTH);
// 设置窗口不可大小改变
// this.setResizable(false);
// 将布局管理器设置为空
getContentPane().setLayout(null);
// 调用构建菜单方法
createMenu();
// 调用构建工具栏方法
createToolBar();
// 调用构建左右下面板的方法
createPanel();
// 设置窗口可见
this.setVisible(true);
// 增加关闭事件
this.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
System.exit(0);
}

});
// this.getContentPane().setBackground(Color.BLACK);
}

// 创建登录窗口的引用
LoginWindow loginWindow = null;
// 创建菜单栏
JMenuBar mnb = null;
// 创建菜单
JMenu mnuFile = null;
// 创建菜单栏项
JMenuItem mniNew = null;
JMenuItem mniQuit = null;
// 创建工具栏
JToolBar jToolBar = null;
// 创建工具栏中的显示登录窗口的按钮
JButton btnLogin = null;
//创建工具栏中的开始插入数据按钮
JButton btnInsertDate = null;
// 创建左面板、右面板的引用
JPanel leftWindow = null;
JPanel rightWindow = null;

// 创建左面板中树的引用
JTree tree = null;
// 创建右上面板和右下面板的引用
JPanel rightUpWindow = null;
JPanel rightDownWindow = null;

/**
*
* @param loginWindow
* 登录窗口 该方法用于设置登录窗口
*/
public void setLoginWindow(LoginWindow loginWindow) {
this.loginWindow = loginWindow;
}

/**
* 该方法用于构建窗口中的菜单
*/
private void createMenu() {
// 初始化菜单栏
mnb = new JMenuBar();
// 初始化菜单
mnuFile = new JMenu("文件");
// 初始化菜单项
mniNew = new JMenuItem("新建项目");
mniQuit = new JMenuItem("退出");
// 将菜单项添加到菜单中
mnuFile.add(mniNew);
mnuFile.add(mniQuit);
// 将菜单添加到菜单栏中
mnb.add(mnuFile);
// 将菜单栏挂靠在框架上
this.setJMenuBar(mnb);
/**
* 单击新建项目菜单触发
*/
mniNew.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// 显示登陆窗口
loginWindow.setVisible(true);
}
});
}

/**
* 该方法用于构建窗口中的工具栏
*/
private void createToolBar() {
// 初始化工具栏
jToolBar = new JToolBar();
// 设置工具栏的位置
jToolBar.setBounds(0, 0, 794, 38);
// 将工具栏添加到主窗口中
getContentPane().add(jToolBar);
// 初始化新建项目按钮
btnLogin = new JButton("\u65B0\u5EFA\u9879\u76EE");
//初始化开始插入数据按钮
btnInsertDate = new JButton("\u5F00\u59CB\u63D2\u5165\u6570\u636E");
/**
* 单击新建项目按钮触发的事件
*/
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 显示登陆窗口
loginWindow.setVisible(true);
}
});
/**
* 单价开始插入数据按钮触发的事件
*/
btnInsertDate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
// 将新建项目按钮添加到工具栏
jToolBar.add(btnLogin);
//将开始插入数据按钮添加到工具栏
jToolBar.add(btnInsertDate);
}

/**
* 该方法用于初始化左右下面板
*/
public void createPanel() {
/*
* //初始化左面板 leftWindow = new LeftWindow(); //调用左面板的显示方法
* leftWindow.showMethod(); //将左面板添加到主窗口
* getContentPane().add(leftWindow);
*
* JPanel panel = new JPanel(); leftWindow.add(panel); //初始化右面板
* rightWindow = new RightWindow(); //调用右面板的显示方法
* rightWindow.showMethod(); //将右面板添加到主窗口
* getContentPane().add(rightWindow);
*/
// 初始化左面板
leftWindow = new JPanel();
// 设置左面板位置
leftWindow.setBounds(10, 48, 293, 482);
// 将左面板添加到主窗口
getContentPane().add(leftWindow);
// 初始化右面板
rightWindow = new JPanel();
// 设置右面板位置
rightWindow.setBounds(313, 48, 461, 482);
// 将右面板添加到主窗口中
getContentPane().add(rightWindow);
//设置颜色,以后删掉
leftWindow.setBackground(Color.red);
rightWindow.setBackground(Color.pink);

// 设置右面板的布局管理器为空
rightWindow.setLayout(null);
// 初始化右上面板
rightUpWindow = new JPanel();
// 设置右上面板的位置
rightUpWindow.setBounds(10, 10, 441, 149);
//测试方法,一会删掉
//testMethod();

// 将右上面板添加到右面板
rightWindow.add(rightUpWindow);
// 初始化右下面板
rightDownWindow = new JPanel();
// 设置右下面板的位置
rightDownWindow.setBounds(10, 169, 441, 303);
// 将右下面板添加到右面板
rightWindow.add(rightDownWindow);
//设置颜色,以后删掉
rightUpWindow.setBackground(Color.BLACK);
rightDownWindow.setBackground(Color.yellow);
}
/**
* 本方法用来测试不用点击登陆方式直接放置一个JTree是否显示,结果是显示的!
*/
private void testMethod() {
DefaultMutableTreeNode color = new DefaultMutableTreeNode("Color", true);
/* DefaultMutableTreeNode gray = new DefaultMutableTreeNode("Gray");
color.add(gray);
color.add(new DefaultMutableTreeNode("Red"));
gray.add(new DefaultMutableTreeNode("Lightgray"));
gray.add(new DefaultMutableTreeNode("Darkgray"));
color.add(new DefaultMutableTreeNode("Green"));*/
JTree example5 = new JTree(color);
leftWindow.add(new JScrollPane(example5));
}

/**
*
* @param database
* 数据库名
* 该方法用于创建左面板中的树
* 该方法是由登录窗口登录完成后调用的
*/
public void createTree(String database) {
//初始化根节点
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(database,true);
System.out.println("到底调用方法了么");
//初始化树
tree = new JTree(treeNode);
tree.setBackground(Color.BLACK);
//将树添加到左面板,JTree必须放在JScrollPane里面
leftWindow.add(new JScrollPane(tree));
}
}
...全文
807 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuer0520 2014-02-26
  • 打赏
  • 举报
回复
引用 3 楼 Gaowen_HAN 的回复:
引用 2 楼 fangmingshijie 的回复:
awt和swing混用。会引发异常的
+1,一个是多线程设计(AWT),一个是单线程(Swing)。故大部分Swing组件不是线程安全的,只能在EDT中才是安全应用
我只学过awt,是不是Swing中全都是Swing的东西,不能用awt包里的东西啊,Swing里所有东西都重写了一份?
fearlessMore 2014-02-26
  • 打赏
  • 举报
回复
引用 2 楼 fangmingshijie 的回复:
awt和swing混用。会引发异常的
+1,一个是多线程设计(AWT),一个是单线程(Swing)。故大部分Swing组件不是线程安全的,只能在EDT中才是安全应用
  • 打赏
  • 举报
回复
awt和swing混用。会引发异常的
wuer0520 2014-02-26
  • 打赏
  • 举报
回复

package com.bvtc.mdi.window;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

import com.bvtc.mdi.dao.LoginDao;
/**
 * 
 * @author wangjing
 * 该类是登录窗口
 *
 */
public class LoginWindow extends JDialog {
	
	/**
	 * 
	 * @param frame	指定Frame
	 * @param title	指定标题
	 * @param model	是否model	
	 */
	public LoginWindow(Frame frame, String title, boolean model) {
		super(frame,title,model);
		//初始化父窗口的引用
		iw = (IndexWindow) frame;
		//调用登录窗口的showMethod方法显示登录窗口
		showMethod();
	}
	
	//创建父窗口的引用
	IndexWindow iw = null;
	//创建操作数据库的Dao类的对象的引用
	LoginDao loginDao = null;
	//拿到登陆窗口的组件容器
	Container container = this.getContentPane(); 
	
	//定义server、database、username、pssword文本显示区域
	JLabel jlServer = null;
	JLabel jlDataBase= null;
	JLabel jlUserName = null;
	JLabel jlPassword = null;
	//定义server、database、username、pssword输入区域
	JTextField jtfServer = null; 
	JTextField jtfDataBase = null; 
	JTextField jtfUserName = null; 
	JTextField jtfPassword = null; 
	//定义确定按钮和退出按钮
	JButton jbSubmit = null;
	JButton jbCancel = null;
	
	
	/**
	 * 该方法是显示登录窗口的方法
	 */
	public void showMethod() {
		//设置窗口大小
		this.setSize(300, 500);
		//调用该方法初始化登陆窗口中的控件并添加到登陆窗口中
		buildControl();
		//给确定按钮和取消按钮绑定事件
		event();
		//调用该方法将窗口显示到屏幕中间
		showInMiddle();
		//将窗口模式化
		this.setModal(true);
		this.setVisible(true);
	
	}
	/**
	 * 该方法是处理确定按钮和取消按钮的事件类
	 */
	private void event() {
		//处理取消按钮事件
		jbCancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//调用本方法隐藏窗口
				hideWindow();
			}
		});
		//处理确定按钮事件
		jbSubmit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//定义用来存放server、datsbase、username、pssword值的变量
				String server = null;
				String database = null;
				String userName = null;
				String password = null;
				//给server、database、username、pssword变量赋值
				server = jtfServer.getText();
				database = jtfDataBase.getText();
				userName = jtfUserName.getText();
				password = jtfPassword.getText();
				//初始化loginDao对象
				loginDao = new LoginDao(server, database, userName, password);
				//如果可以连接上数据库,隐藏登陆窗口
				if(loginDao.validate()!=false) {
					hideWindow();
				}else {//如果连接不上,弹出报错窗口
					
				}	
				iw.createTree(database);
			}
		});
	}
	/**
	 * 该方法用于隐藏窗口
	 */
	private void hideWindow() {
		this.setVisible(false);
	}
	/**
	 * 该方法用于构建登陆窗口中的控件
	 * 将控件初始化并添加到登陆窗口中
	 */
	private void buildControl() {
		//设置窗口的布局管理器为null
		this.setLayout(null);
		//初始化确定按钮和取消按钮
		jbSubmit = new JButton("确定");
		jbCancel = new JButton("取消");
		//初始化server、database、username、pssword文本显示区域
		jlServer = new JLabel("server");
		jlDataBase = new JLabel("database");
		jlUserName = new JLabel("username");
		jlPassword = new JLabel("password");
		//初始化server、database、username、pssword输入区域
		jtfServer = new JTextField();
		jtfDataBase = new JTextField();
		jtfUserName = new JTextField();
		jtfPassword = new JTextField();
		//设置确定按钮和取消按钮的位置和大小
		jbSubmit.setBounds(130, 400, 60, 30);
		//设置按钮的颜色
		jbSubmit.setBackground(new Color(1,169,219));
		//要想按钮的颜色显示出来必须将不透明设置为true
		jbSubmit.setOpaque(true);
		jbCancel.setBounds(200, 400, 60, 30);
		jbCancel.setBackground(new Color(1,169,219));
		jbCancel.setOpaque(true);
		//设置server、database、username、pssword文本显示区域的位置和大小
		jlServer.setBounds(40, 40, 70, 30);
		jlDataBase.setBounds(40, 130, 70, 30);
		jlUserName.setBounds(40, 220, 70, 30);
		jlPassword.setBounds(40, 310, 70, 30);
		//设置server、database、username、pssword输入区域的位置和大小
		jtfServer.setBounds(130, 40, 120, 30);
		jtfDataBase.setBounds(130, 130, 120, 30);
		jtfUserName.setBounds(130, 220, 120, 30);
		jtfPassword.setBounds(130, 310, 120, 30);
		//将控件添加到登陆窗口中
		container.add(jbSubmit);
		container.add(jbCancel);
		container.add(jlServer);
		container.add(jlDataBase);
		container.add(jlUserName);
		container.add(jlPassword);
		container.add(jtfServer);
		container.add(jtfDataBase);
		container.add(jtfUserName);
		container.add(jtfPassword);
	}
	/**
	 * 该方法是将登录窗口显示到屏幕中间的方法
	 */
	private void showInMiddle() {
		//获取屏幕大小
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		//获取JDialog的大小
		Dimension frameSize = this.getSize();
		if (frameSize.height > screenSize.height) {
			frameSize.height = screenSize.height;
		}
		if (frameSize.width > screenSize.width) {
			frameSize.width = screenSize.width;
		}
		this.setLocation((screenSize.width - frameSize.width) / 2,
				(screenSize.height - frameSize.height) / 2);
	}
}

package com.bvtc.test;

import com.bvtc.mdi.window.IndexWindow;
import com.bvtc.mdi.window.LoginWindow;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//创建主窗口的引用
		IndexWindow iw = new IndexWindow();
		// 创建并初始化登录窗口
		LoginWindow loginWindow = new LoginWindow(iw,"Project Configuration",true);
		iw.setLoginWindow(loginWindow);
	}
	
}

package com.bvtc.mdi.dao;

import com.bvtc.mdi.db.DB;
/**
 * 
 * @author wangjing
 *	该类是登陆窗口操作数据库的dao类
 */
public class LoginDao {
	// 定义用来接收server、database、username、pssword值的变量
	String server = null;
	String database = null;
	String userName = null;
	String password = null;
	
	//创建数据库操作类对象
	DB db = new DB();

	/**
	 * 
	 * @param server
	 *            服务器
	 * @param database
	 *            数据库
	 * @param userName
	 *            用户名
	 * @param password
	 *            密码
	 */
	public LoginDao(String server, String database, String userName, String password) {
		super();
		this.server = server;
		this.database = database;
		this.userName = userName;
		this.password = password;
	}
	
	public boolean validate() {
		return db.connect(server, database, userName, password);
	}

}

package com.bvtc.mdi.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 * 
 * @author wangjing
 *	该类是用于操作数据库的类
 */
public class DB {
	Connection conn = null;
	/**
	 * 
	 * @param server
	 * @param database
	 * @param userName
	 * @param password
	 * 该方法是连接数据库的方法
	 */
	public boolean connect(String server, String database, String userName,
			String password) {
		//拼接url
		String url = "jdbc:mysql://"+server+":3306/"+database;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, userName, password);
			return true;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		return false;
	}
}
此外还有一个mysql连接JDBC的jar包没上传 求大神们指点啊
目录 目录 1 (一) Spring 开发 Swing GUI 简介——依赖注入和富客户机 5 关于本教程 5 前提条件 6 Spring 和依赖注入概述 7 什么是 Spring 框架? 7 什么是依赖注入? 7 环境设置 7 选择编译环境 7 设置 Ant 8 通过 Ant 自动下载依赖软件 10 设置 Maven 10 通过 Maven 自动下载依赖软件 12 设置 Eclipse 13 下载依赖的 JAR 文件并在 Eclipse 的 classpath 中定义这种依赖性 15 创建 to-do 列表:基本的 Swing 和 Spring 应用程序设置 17 创建 MainFrame、Launcher 和 ToDo 类 17 创建 Spring app-context.xml bean 定义文件 19 运行应用程序 20 定义 bean 属性 21 创建 to-do 列表:创建一个可重用组件并在表中显示数据 23 创建一个可重用的面板 23 将 bean 组合在一起 24 添加一个表并重用这个面板 26 定义表模型 28 显示列表中的项 29 创建 to-do 列表:完成 —— 按钮和监听程序 31 创建按钮和监听程序 32 组合按钮和监听程序 35 Spring Rich Client Project 37 Spring Rich Client Project 概述 37 结束语 38 (二) 适用于各类Swing应用的通用数据验证模块 39 项目创建好后,加入类库: 41 然后写一个persistence bean: 41 Java代码 41 我称这个类为HibernateValidationUI,代码如下: 43 Java代码 43 类中用到的Java2DIconFactory代码如下: 47 Java代码 47 Factory类 49 Java代码 49 最后,我们可以编写一个Demo application来看看效果如何,代码如下: 51 Java代码 51 总结: 55 (三) 对JTree从创建到使用详解 56 (四) JTree的使用方法 57 JTreeDemo.java源程序 57 经验汇总 60 1. 初始化 60 2. 三个经常使用的取值函数 60 3. 根据node得到path: 60 4. 根据Path展开到该节点 60 5. 根据path设定该节点选定 61 6. 选中节点的方法 61 7. 滚动到可见位置 61 8. 给JTree添加右键弹出菜单 61 9. 关于JTree的展开 61 10. 如何遍历JTree 62 (五) JTree右键菜单实现编辑、添加、删除节点 63 Test.java源代码 63 (六) 功能齐全的JTree例子 66 TreeEditTest.java源代码 66 (七) JTree控件的使用 70 构造函数: 70 TreeModel接口 70 DefaultTreeModel缺省版本 71 TreeNode接口 71 TreeExpansionListener接口 71 TreeCellRenderer 72 例子: 73 (八) 如何为JTree添加右键菜单? 75 (九) 如何使JTextArea随着窗体的变化自动调整大小 76 TextAreaTest源代码 76 (十) JAVA swing编程JTree实现系统目录 77 FileTree1.java源代码 77 (十一) Java Swing中的JTree模型 85 Swing.tree包中的主要类名称实现 85 1. 构建树模型 86 2. 树结点 86 树结构详细类图 86 2.1 TreeNode接口 86 2.2 MutableTreeNode接口 87 2.3 DefaultMutableTreeNode类 88 3. 编辑树 88 3.1获得结点路径 88 3.2编辑结点 88 3.3视图显示 89 4. 查找树 89 5. 绘制结点 90 (十二) JTree鼠标左键的双击事件选用那个监听器 91 MouseDemo.java源代码 92 (十三) JTree 92 JTree的构造函数: 93 JTreeDefaultDemo.java源代码 93 (十四) JTree 应用 96 Frame1.java源代码 96 MyDefaultTreeCellRenderer.java源代码 98 (十五) JTree控件 100 树和节点的基本概念 100 有关树JTree的类和接口 100 代码实例:构建一棵树 101 相关语句解释 101 (十六) JTree应用示例——文件路径 103 AnimatedIconTreeExample.java源代码 103 //内部类NodeImageObserver.java源代码 105 //IconNodeRenderer.java源代码 106 //IconNode.java源代码 107 (十七) Swing 学习笔记 108 Swing API 包括18个公共包: 108 例程1.1 HelloWorldSwing.java 109 例程2.2 HelloWorldJFrame.java 110 (十八) 动态加载文件树的java程序 111 FileSystemTree.java源代码 112 //内部类 TreeWillExpandListenerImp.java 114 (十九) 向 Java 应用程序伸出援助之手——用 JavaHelp 2.0 构建下一个 Java 应用程序的帮助系统 115 入门 116 使用 HelpSet 117 HelpSet 数据文件 118 helpset 文件 118 maps 部分 119 view 部分 119 presentation 部分 120 implementation 部分 121 map 文件 121 导航文件 121 TOC 122 Index 122 Glossary 123 Favorites 123 主题文件 123 在 Java 应用程序中调用 JavaHelp 124 自定义外观 125 配置图标 125 基于文字的标签还是基于图像的标签? 125 要工具栏还是不要工具栏? 125 设置字体 126 使用展示窗口 127 标签 128 四种 activator 129 添加内容敏感的帮助 130 窗口级帮助 131 字段级帮助 131 屏幕级帮助 133 添加嵌入帮助 135 添加搜索功能 136 停用词 137 自定义停用词列表 137 合并 helpset 138 静态和动态合并 139 添加轻量级组件 141 基于服务器的帮助 144 设置 144 JavaHelp 服务器 bean 144 JavaScript 文件 145 JSP 文件 145 测试服务器端帮助 148 结束语 149

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧