how2j.cn


工具版本兼容问题
学习了这么多J2SE基础和中级的知识点,接下来就需要一个综合性的项目把这些的知识点都融会贯通

本项目是基于Swing和JDBC开发的图形界面桌面应用,涵盖了J2SE的绝大部分基础知识,通过这个项目能运用和锻炼几乎大部分的J2SE知识和技能。

涉及到如下内容:
基础内容:
面向对象 字符串数字 日期

中级内容:
异常 ,集合,JDBC, 反射机制,I/O,Swing, 利用TableModel更新数据, 图形界面的皮肤

高级内容:
图表chart动态生成,数据库的备份与恢复,自定义圆形进度条

软件设计思想:
单例模式,面板类与监听器类松耦合,Entity层设计,DAO层设计,Service层设计

业务常见处理手法:
CRUD操作,配置信息,配置信息初始化,报表生成,一对多关系,多对一关系

通过本项目,积累宝贵的项目经验,在面试的时候,多一项谈资多一层砝码多一些薪水



18分18秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)




HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


最近10个提问
2019-07-14 exe文件运行不了,run.bat可以运行
J2E_长江
另一个hutubill文件里的run.bat可以运行,我添加了消费类型和消费金额的,但是保存下来的sql文件是空的,数据库安装位置也是正确的,老师能解释下是为什么吗?




1 个答案

how2j 答案时间:2019-07-15
exe 不能用大概是兼容性问题,所以我提供了 bat 嘛。 sql 文件为空是什么意思呢?



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-07-13 一本糊涂账-改进练习
来载



参考了别人的格局,一点一点码出来。。 接下来继续学习java,同时也想学python,会不会贪多嚼不烂呢
public class ListPanel extends WorkingPanel {
	static {
		GUIUtil.useLNF();
	}

	public static ListPanel instance = new ListPanel();

	// 标识ListPanel是否是起始页面,作用是如果在初始页面就删除(修改)数据的话,使得操作后仍显示全数据
	// 否则直接调用ListService的listRecord()方法的话,就会根据筛选栏的默认状态显示数据,导致显示前后不一致
	public boolean ifInit;

	// 用来标识是否点击了编辑按钮,如果点击了,那么编辑窗口关闭后表格应该仍是选中之前所选的,而不是选中默认的第一行
	public boolean ifEdit;

	public JButton bQuery = new JButton("查询");
	public JButton bEdit = new JButton("编辑");
	public JButton bDelete = new JButton("删除");

	public JCheckBox bCheckBox = new JCheckBox("查询全部");

	JLabel lCategory = new JLabel("消费类型");
	JLabel lPaymode = new JLabel("支付方式");
	JLabel lDate = new JLabel("日期");
	JLabel lTo = new JLabel("~");

	// 利用两个Model分别生成Category、Paymode类的下拉框,Model的构造方法中使用到了ListService中的2种list方法
	public ListCategoryComboBoxModel lcbModel = new ListCategoryComboBoxModel();
	public ListPaymodeComboBoxModel lpbModel = new ListPaymodeComboBoxModel();
	public JComboBox<Category> cbCategory = new JComboBox<>(lcbModel);
	public JComboBox<Paymode> cbPaymode = new JComboBox<>(lpbModel);

	public JXDatePicker dpFrom = new JXDatePicker(new Date());
	public JXDatePicker dpTo = new JXDatePicker(new Date());

	// 数据表格的数据来源于ListTableModel中的Record类集合rs
	public ListTableModel ltm = new ListTableModel();
	public JTable t = new JTable(ltm);

	private ListPanel() {
		GUIUtil.setColor(ColorUtil.grayColor, lCategory, lPaymode, lDate, lTo);
		GUIUtil.setColor(ColorUtil.blueColor, bQuery, bEdit, bDelete, cbCategory, cbPaymode);

		JPanel pFilter = new JPanel();
		pFilter.setLayout(new FlowLayout());
		pFilter.add(lCategory);
		pFilter.add(cbCategory);
		pFilter.add(lPaymode);
		pFilter.add(cbPaymode);
		pFilter.add(lDate);
		pFilter.add(dpFrom);
		pFilter.add(lTo);
		pFilter.add(dpTo);
		pFilter.add(bCheckBox);

		// 把记录表格设置为单选模式
		t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		JScrollPane sp = new JScrollPane(t);

		JPanel pOperation = new JPanel();
		pOperation.setLayout(new FlowLayout());
		pOperation.add(bQuery);
		pOperation.add(bEdit);
		pOperation.add(bDelete);

		this.setLayout(new BorderLayout());
		this.add(pFilter, BorderLayout.NORTH);
		this.add(sp, BorderLayout.CENTER);
		this.add(pOperation, BorderLayout.SOUTH);

		addListener();
		updateData();

		ifInit = true;
	}

	public static void main(String[] args) {
		GUIUtil.showPanel(ListPanel.instance);
	}

	// 在ListService中被调用,获取当前消费分类下拉栏选中哪一项(是否选中“全部”),来决定调用RecordDAO中list方法的哪种模式
	public Category getSelectedCategory() {
		return (Category) cbCategory.getSelectedItem();
	}

	// 在ListService中被调用,获取当前支付类型下拉栏选中哪一项(是否选中“全部”),来决定调用RecordDAO中list方法的哪种模式
	public Paymode getSelectedPaymode() {
		return (Paymode) cbPaymode.getSelectedItem();
	}

	@Override
	public void updateData() {
		t.updateUI();
		// 如果点击了编辑按钮,那么编辑窗口关闭后表格仍然选中之前所选行,否则默认选中第一行
		if (ifEdit) {
			int index = t.getSelectedRow();
			t.getSelectionModel().setSelectionInterval(index, index);
			ifEdit = false;
		} else
			t.getSelectionModel().setSelectionInterval(0, 0);

	}

	// 在CenterPanel的show方法中被调用,可以使得每当点击按钮栏上的ListPanel按钮时,ListPanel的筛选栏状态都初始化
	public void resetInput() {
		if (0 != lcbModel.cs.size())
			cbCategory.setSelectedIndex(0);
		if (0 != lpbModel.ps.size())
			cbPaymode.setSelectedIndex(0);
		dpFrom.setDate(new Date());
		dpTo.setDate(new Date());
		bCheckBox.setSelected(false);
	}

	@Override
	public void addListener() {
		bQuery.addActionListener(new ListListener());
		bEdit.addActionListener(new ListListener());
		bDelete.addActionListener(new ListListener());
		bCheckBox.addActionListener(new ActionListener() {

			// 如果全选框被选中,则其它筛选栏不可用
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (bCheckBox.isSelected()) {
					cbCategory.setEnabled(false);
					cbPaymode.setEnabled(false);
					dpFrom.setEnabled(false);
					dpTo.setEnabled(false);
				} else {
					cbCategory.setEnabled(true);
					cbPaymode.setEnabled(true);
					dpFrom.setEnabled(true);
					dpTo.setEnabled(true);
				}
			}

		});
	}

}

							


1 个答案

how2j 答案时间:2019-07-15
good。 py 站长不会,无法给出值得参考的意见。



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-07-12 导入项目,运行报错,提示“类路径引用的项目”不存在
2019-07-09 RecordPanel 单独运行会报空指针异常
2019-07-09 单例模式的话为什么构造方法是public的呀?
2019-07-08 Cannot resolve query parameter '2'
2019-07-07 CatagoryListener中新增和编辑不输入就退出空指针异常
2019-07-05 useLNF方法中的setLookAndFeel报错
2019-07-05 用户IDEA如何带入jar包
2019-07-04 CategoryDAO 里面的 添加 更新 删除操作,我觉得应该返回值 设置一个boolean, 这样外面好判断是否 操作成功吧。




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-一本糊涂账-项目简介 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图