美文网首页
20170708 Swing界面编程

20170708 Swing界面编程

作者: houc | 来源:发表于2017-07-08 17:43 被阅读169次

    参考文献:《Java疯狂讲义》(第三版)

    Swing开发图形界面比AWT更优秀

    因为Swing是一种轻量级组件,它采用100%的Java实现,不再依赖于本地平台的图形界面,所以可以在所有的平台上保持相同的运行效果,对跨平台的支持比较出色

    此外,Swing提供比AWT更多的图形界面组件,因此可以开发出更美观的图形界面。

    AWT需要调用底层平台的GUI实现,所以AWT只能使用各种平台上GUI组件的交集,这大大限制了AWT所支持的组件。

    Swing几乎所有组件都采用了Java实现,所以无需考虑底层平台是否支持该组件,因此Swing可以提供许多特殊容器和组件。

    Swing组件都采用了MVC模式。

    Swing的所有组件采用了Java实现,不再调用本地平台的GUI,导致Swing图形界面的显示速度要比AWT图形界面显示速度稍微慢一点。

    Swing的优势:

    1、Swing组件不再依赖于本地平台的GUI,无须采用各种平台的GUI交集,因此Swing提供了大量图形界面组件,远远超过了AWT所提供的图形界面组建集

    2、Swing组件不再依赖于本地平台GUI,因此不会产生与平台相关的bug

    3、Swing组件在各种平台上运行可以保证具有相同的图形界面外观

    特点:

    1、采用MVC模式

    2、在各种平台上保证一致

    知识点:Swing专门为菜单项、工具按钮之间的分隔符提供了一个JSwparator类,通常使用JMenu或者JPopupMenu的addSeparator()方法来创建并添加JSeparator对象,而不是直接使用JSeparator。实际上,JSeparator可以用在任何需要使用分隔符的地方。

    知识点:

    为菜单项指定快捷键时应该使用大写字母来代表按键,例如 KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK)代表“Ctrl+N”,但KeyStroke.getKeyStroke('n',InputEvent.CTRL_MASL)不代表“Ctrl +N”

    知识点:

    JFrame提供了一个getContentPane()方法,这个方法用于返回该JFrame的顶级容器(即JRootPane对象),这个顶级容器会包含JFrame所显示的所有非菜单组件。

    即所有看似放在JFrame中的Swing组件,除了菜单外,其实都是放在JFrame对应的顶级组件中的,而JFrame容器提供了个体ContentPane()方法返回的顶级容器。

    在Java5之前,Java甚至不允许向JFrame中添加组件,必须先调用JFrame的getContentPane()方法获得该窗口的顶级容器,然后将所有组件添加到该顶级容器中。

    Java5以后,Java改写了JFrame的add()和setLayout()等方法,当程序调用JFrame的add()和setLayout()等方法时,实际上是对JFrame的顶级容器进行操作。

    知识点:

    为什么单击Swing多行文本域时不是弹出像AWT多行文本域中的右键菜单?

    这是由Swing组件和AWT组件实现机制不同决定的。

    前面已经之处,AWT的多行文本域实际上依赖于本地平台的多行文本域。简单地说当我们在程序中放置一个AWT多行文本城,且该程序在Windows平台上运行时,该文本域组件将和记事本工具编辑区具有相同的行为方式,因为该文本域组件和记事本工具编辑区的底层实现是一样的。

    但Swing的多行文本域组件则是純Java的,它无须任何本地平台的GUI支持,他在任何平台上具有相同的行为模式,所以Swing多行文本域组件默认是没有右键菜单的,必须由程序员显示的为它分配右键菜单。

    而且Swing提供的JTextArea组件默认没有滚动条(AWT的TextArea是否有滚动条则取决于底层平台的实现),为了让该多行文本域具有滚动条,可以将该多行文本域放到JscrollPane容器中。

    相关文章

      网友评论

          本文标题:20170708 Swing界面编程

          本文链接:https://www.haomeiwen.com/subject/bbfjhxtx.html