`
缠小溪
  • 浏览: 23868 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

课程设计——小型图书管理系统中遇到的问题

 
阅读更多

为期两周的课程设计中,我选的课题是小型图书管理系统,该系统有如下功能:

用户登陆和注册、用户信息查看(个人信息,图书借阅情况,到期归还提醒,个人读书笔记管理,个人读书计划管理)

在编写程序的过程中,遇到了如下的问题:

1、两个不同的操作如何实现同一个接口

在程序中有一个键盘事件,就是判断文本框中输入日期时按照统一的格式自动添加“-”,如2012-09-09,如果只有一个文本框的话,那么简单,直接注册一个键盘事件监听器就能故解决,但是同时从在两个文本框的话,同一个键盘事件显然不能处理两个文本框的内容。

txtStartTime.addKeyListener(this);
txtEndTime.addKeyListener(this);

public void keyReleased(KeyEvent e){
			if(e.getKeyCode()!=e.VK_BACK_SPACE){
				if(txtStartTime.getText().length()==4||
						txtStartTime.getText().length()==7){
					txtStartTime.setText(txtStartTime.getText()+"-");
				}
			}
		}
		public void keyPressed(KeyEvent e){
			
		}
		public void keyTyped(KeyEvent e){
			if(txtStartTime.getText().length()>=10)
				txtStartTime.setText(txtStartTime.getText().substring(0,9));
		}
这样显然不行,当在第二个文本框中操作时,仍然更改的是第一个文本框中内容。

这时候可以利用内部类,来实现同一个接口,响应不同的事件源。

txtStartTime.addKeyListener(new StartTimeClass());
		txtEndTime.addKeyListener(new EndTimeClass());

class StartTimeClass implements KeyListener{
		/*
		 * (non-Javadoc)
		 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
		 */
		@SuppressWarnings("static-access")
		public void keyReleased(KeyEvent e){
			if(e.getKeyCode()!=e.VK_BACK_SPACE){
				if(txtStartTime.getText().length()==4||
						txtStartTime.getText().length()==7){
					txtStartTime.setText(txtStartTime.getText()+"-");
				}
			}
		}
		public void keyPressed(KeyEvent e){
			
		}
		public void keyTyped(KeyEvent e){
			if(txtStartTime.getText().length()>=10)
				txtStartTime.setText(txtStartTime.getText().substring(0,9));
		}
	}
	class EndTimeClass implements KeyListener{
		/*
		 * (non-Javadoc)
		 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
		 */
		@SuppressWarnings("static-access")
		public void keyReleased(KeyEvent e){
			if(e.getKeyCode()!=e.VK_BACK_SPACE){
				if(txtEndTime.getText().length()==4||
						txtEndTime.getText().length()==7){
					txtEndTime.setText(txtEndTime.getText()+"-");
				}
			}
		}
		public void keyPressed(KeyEvent e){
			
		}
		public void keyTyped(KeyEvent e){
			if(txtEndTime.getText().length()>=10)
				txtEndTime.setText(txtEndTime.getText().substring(0,9));
		}
	}

2、窗口执行addWindowListener之后自动关闭的问题

我使用如下方法关闭窗口

addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent we){
				int result=JOptionPane.showConfirmDialog(null, "您确定离开?","系统消息提示",
						JOptionPane.YES_NO_OPTION);
				if(result==JOptionPane.YES_OPTION){
					dispose();
					new UserGUI(USERNAME);
				}else{
					//do nothing
				}
			}
		});
这种情况下不管你单击“是”还是“否”,系统都会关闭窗口。一直没有想明白原因,后来发现,原来setDefaultCloseOperation()的默认属性是close,这样,用户在窗体上发起close是就默认关闭了,只要把它的属性改成DO_NOTHING_ON_CLOSE就可以了。

3、如何把char型的数字转换成INT型

char型和int型之间没有直接的转换方式,只能先把char型转换成string,然后再把string转换成int

4、关于substring(start,end)方法的问题

substring(start,end)方法是获取从start开始到end结束,但是不包括end的字符串,我们很多情况下都会忽略,以为获取的字符串中也有end字符。

5、关于calendar类

在进行时间处理时,calendar是少不了的。但是对于calendar有一些需要注意的问题:

用calendar获取的月份要+1

用calendar获取的星期要-1

将calendar翻到某个时间是,月份要-1

6、listSelectionListener的问题

listSelectionListener的事件valueChanged(LiseSelectionEvent e){}方法,在函数选中是,时间会执行两次,分别是鼠标单击和鼠标释放,很多人都会忽略这个问题,在编写程序中,这两次执行,往往会导致漏洞,我们可以利用getValueIsAdjusting()获得的值来区分,如果为true,是鼠标按下,如果为false,是鼠标离开。

public void valueChanged(ListSelectionEvent e){
		if(e.getValueIsAdjusting()==true){
			
		}else{
			i=table.getSelectedRow();
			outputData();
		}
		
	}
7、关于JTable的问题,这个需要专门讨论,这里只是标记一下。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics