您的位置:首页 > 编程语言 > Java开发

NetBeans下实现JAVA GUI中的鼠标拖放效果(09.06.09)

2009-06-09 01:25 337 查看
  这一阵子由于要做JAVA的课程设计,作为初学者多多少少接触了一点JAVA GUI的开发,把这些感受记录下来,作为自己学习历程的一个标签罢;如若能对大家有什么用处,亦感快矣~

  (闲扯点别的,或许很大程度上是因为我个人对NetBeans的不熟悉,这几天来的摸爬滚打下来,还是忍不住觉得NetBeans是我用过的所有IDE中最难用的一款。很多基础功能还比较弱;由设计器生成的代码是不允许手工修改的,而设计器本身提供的定制代码的功能简直有一点莫名其妙的说,这一点给GUI开发带来不少麻烦。所以个人觉得要熟悉这个IDE需要颇费些功夫。当然也不是说NetBeans就一点优点没有,它的自动生成jar包的能力就帮我们省去了不少麻烦~)

  先提一下我们这次课程设计的背景:设计实现一个餐馆管理系统,其中涉及鼠标拖动的地方是,允许通过拖放操作,将某个被预定餐桌的预约转移到另一张空闲的餐桌上。对于前台GUI来说,就是要实现两张桌子图标的转换以及拖动过程中的鼠标跟随效果。

  根据业务逻辑,能够支持拖动操作的仅是转移餐桌预定,而顾客正在用餐中的餐桌是不应该支持通过拖动转换状态的。

  每个图标我打算使用一个JPanel来承载,因为拖动时那个光标跟随图标要在所有其他餐桌图标之上,所以最底层的容器我选用了JLayeredPane,如果用一个普通的不分层的Jpanel的话貌似效果不是很好的说~

  我写了如下几个类:

  (1)Table类:继承于JPanel,维护每种table的状态,提供了转换table状态(例如由预约态转化为空闲态等)的方法;

  (2)TableManager类:维护一个table的列表,管理其中的所有table的布局,控制其对外部鼠标事件的响应;

  (3)DraggingImage类:继承于JPanel,维护拖动时的光标跟随图标。

  对于拖放效果的实现其实只需要把整个过程中各个相关组件对不同鼠标事件的响应逻辑想清楚就OK,对于具体的实现可以参阅源代码(有详尽的注释),这里我只简述一下在实现过程中对自己遇到的问题的解决:

  第一,对于承载图标的Panel根据需要可通过setOpaque()方法将其背景色去掉,否则透明图标(PNG或GIF格式)就失去意义了;

  第二,通过代码添加进容器的子panel一定要显式设置其尺寸,否者会根本显示不出来(因为尺寸很小或者干脆为零);

  第三,如果改变了某个组件外观后没有看到效果,考虑一下是否是没有调用repaint()方法的后果。

  效果示意图:



  (点此下载源代码)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: