为期两周的课程设计中,我选的课题是小型图书管理系统,该系统有如下功能:
用户登陆和注册、用户信息查看(个人信息,图书借阅情况,到期归还提醒,个人读书笔记管理,个人读书计划管理)
在编写程序的过程中,遇到了如下的问题:
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的问题,这个需要专门讨论,这里只是标记一下。
本文记录了为期两周的小型图书管理系统的设计过程及遇到的问题解决方案,包括如何通过内部类实现不同文本框的键盘事件监听、解决窗口自动关闭的问题、char转int的方法等。
1295

被折叠的 条评论
为什么被折叠?



