第14章:创建窗口与applet程序

设计中要遵循的一条基本原则是:让简单的事情变得容易,让困难的事情变得可行!
1。java的GUI,有老版本的AWT,和新的Swing,eclipse也有一套全新的GUI库SWT。
      AWT很老了,不要用,除非特殊情况。

2。Swing比其他GUI编程模型好的多,JavaBean是这个库的框架。复杂的GUI,可以使用
     GUI构造工具快速开发。
     它的特定是:1)动态绑定事件。2)将业务逻辑与用户界面逻辑相分离。
3。编写applet很受限制。表现在:applet不能访问本地磁盘。一般要把applet打包成jar文件,
     JAR文件中的每一个单独实体都能使用"数字签名"。
       而,applet的优势在1)不需要安装。2)不用担心不好的代码会损坏别人的系统。

4。applet的程序框架。
      init()    自动调用,用来对applet进行首次初始化,其中包括组件的布局。必须总是覆盖次方法。
      start()  每当applet进入web浏览器视野的时候,此方法被调用,使得applet能开启它的常规功能
                     (尤其是被stop关闭的功能)。它在init之后被调用。
      stop() 每当applet离开浏览器的时候被调用。使得applet能关闭它的"昂贵"的操作,在destroy前被调用。
      destroy() .当applet不在被使用,要从网页中卸载applet以最终释放资源的时候被调用。

5。为了在浏览器中允许applet,只需要在html中加入:
        <applet code = Applete1 width = 100  height = 50 ></applet>
       但是由于平台的原因,不能指望浏览器能支持正确风格的java.所以java提供了,HTMLconverter工具,
       对前面的applet进行处理。
6。sun提供了appletviewer工具,能从HTML文件中抽取出<applet>标签,然后只运行这个applet 而不是
     显示周围的HTML文件内容。它忽略了除了<applet >以外的所有信息。可以在java源文件中加入。
    //<applet code = Myapplet      width = 20 height = 100 ></applet>
    然后使用appletviewer  <java源文件>

7。可以为applet增加main函数,使得applet 可以从命令行运行。

8。swing组件都具有add×××Listener()和remove×××Listener()方法。为组件添加或者移除事件处理器。
      这个事件模型是可以扩展的。事件处理器×××实现了相应的接口。一个简单的现实是用继承×××适配器.

9。基本swing组件包括说明:
       1)按钮,包括复选框,单选按钮,菜单项都是由AbstractButton继承来。
          ( 使用BasicArrowButton,JToggleButton),想让单选按钮表现出某种排他行为,必须把他们加
         入到按钮组(ButtonGroup).
       2)JLabel或者任何从AbstractButton继承的组件都可以使用Icon,JComponet的setToolTipText
           方法添加工具提示或者JToolTip类,setBorder为组件设置各种边框(TitledBorder,EtchedBorder,
            LineBorder,BevelBorder,SoftBevelBorder)。
       3)文本域JTextField,JTextArea常见监听器DocumentListener,PlainDocument
       4)滚动面板(JScrollPane).
       5)JTextPane控件可以毫不费力的支持多编辑操作.
       6) 复选框(JCheckBox),单选按钮(JRadioButton),组合框(JComboBox),列表框(JList)
          页面面板(JTabbedPane),消息框(JOptionPane.showMessageDialog()等),
          菜单(相关类,JMemu,JMenuItem,JCheckBoxMenuItem,JRadioButtonMenuItem)
           弹出式菜单(JPopupMenu),对话框(JDialog,与JFrame类似),文件对话框(JFileChooser,
          滑块与进度条(JProgressBar,JSlider),树(JTree),表格(JTable)
      7)任何JComponent都可以绘图,但是要是只想有一个直接绘图的平面的话,继承JPanel,覆盖其
         paintComponent,此方法调用时,swing将传递一个Graphics对象。
     8)任意能接受文本的组件都可以接受HTML文本。
     9)选择外观,实例代码:
           try{
              UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          }...
     10)JFC提供剪切板支持(在java.awt.datatransfer包中):
                Clipboard clipbd = getToolKit().getSystemClipboard();

10。使用JAR打包applet   如:jar cf packageName.jar  *.class  。keytool 为applet签名,是applet
       能访问本地磁盘。

11。Java Web Start是 java网络发布协议JNLP的一个参考实现,通过JNLP程序,可以在客户机上下载和安装
        单机版的java应用程序。

12。swing是多线程的。而在swing 中使用多线程又可能同swing的事件调度线程争夺资源。所以,swing提供了
        两种机制。SwingUtilities.invokeLater(),SwingUtilities.invokeandWait(),他们接受runable对象。
        SwingUtilities.invokeandWait是死锁的一种必要条件,要小心。.invokeLater更常用,在初始化之后
        的任何时刻设置swing组件的属性,都应该通过这些方法进行。

13。javaBean,是一种编码规则:
       1)对象xx属性,通常写两个方法,getXxx()和setXxx().
       2)对于布尔型属性可以使用is 替换 get.
       3)bean的普通方法不必遵守以上规则,不过必须是public.
       4)对于事件,使用swing的处理监听器的方式。addXxxListener() ,removeXxxListener()

14。java反射机制可以发现未知类(javaBean)的所有方法。另一个更简单的方案是:Introspector类。其最重要的一个
       静态方法getBeanInfo,传递一个Class对象应用即可。

15。创建javaBean时必须假设它可能在多线程环境中运行。所以;
         1)尽可能把bean中的所有公共方法都时synchronized的。
         2)当一个多路事件触发了一组对事件感兴趣的监听器时,必须假设,在你遍历列表进行通知的同时,监听器可能被
             添加或者移除。

16。更多参考《javaBean》,Elliotte Rusty Harold著。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值