您的位置:首页 > 其它

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

2012-06-25 20:56 721 查看
为期两周的课程设计中,我选的课题是小型图书管理系统,该系统有如下功能:

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

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

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的问题,这个需要专门讨论,这里只是标记一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: