1、GUI程序中panel不能单独存在,必须包含于另一个容器中,可以依附于一个窗口Frame或者依附于另一个panel。其中Frame是一个顶级窗口。

可以对窗口Frame或者面板Panel中的组件进行布局,布局包括流式布局、网格布局等。

1.1: JFrame与Frame的区别:

问题的实质:这两者的区别实质在于一个是在awt包下,另一个是在swing包下。也就是这两个包的不同导致使用时的不同

 AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。

      Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。例如说并不是所有的操作系统都提供了对树形控件的支持, Swing 利用了AWT 中所提供的基本作图方法对树形控件进行模拟。由于 Swing 控件是用100%的Java代码来实现的,因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。

      AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。

坐标系介绍:

frame中组件框 java java里的frame_frame中组件框 java

注意事项:设置组件位置时候是按照包含它的父组件的左上角为原点,而不是按照屏幕左上角为原点,只有当绘制第一个组件或者顶级窗口又或者其父组件是顶级窗口时才是按照屏幕左上角为原点参照坐标系。

1.2: java swing中只关闭当前窗口的方法:

(1)、关闭当前窗体不能使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法,可以使用

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

(2)、通过JButton事件不能使用exit(),这样会使得整个程序的窗体全部关闭,可以使用dispose();这样就只关闭了当前窗体。例如:


frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { frame.dispose(); } });


2、Java中的paint方法为何会被自动调用?

Applet类中的四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()在start()方法里,会调用paint方法。这是applet的运行机制。
init()方法
这个方法主要是为Applet的正常运行做一些初始化工作。当一个Applet被系统调用时,系统首先调用的就是该方法。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。
start()方法
系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该 Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可把只希望执行一遍的代码放在init()方法中。可以在start()方法中开始一个线程,如继续一个动画、声音等。
stop()方法
这个方法在用户离开Applet所在页面时执行,因此,它也是可以被多次执行的。它使你可以在用户并不注意Applet的时候,停止一些耗用系统资源的工作以免影响系统的运行速度,且并不需要人为地去调用该方法。如果Applet中不包含动画、声音等程序,通常也不必实现该方法。
destroy()方法
与对象的finalize()方法不同,Java在浏览器关闭的时候才调用该方法。 Applet是嵌在HTML文件中的,所以destroty()方法不关心何时Applet被关闭,它在浏览器关闭的时候自动执行。在destroy() 方法中一般可以要求收回占用的非内存独立资源。(如果在Applet仍在运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法。

3、多线程

frame中组件框 java java里的frame_控件_02

其中run()方法中 是线程的执行体。线程创建之后不一定立即执行,具体执行由CPU调度。

线程的生命周期:

frame中组件框 java java里的frame_Swing_03

更完整的生命周期:

frame中组件框 java java里的frame_java_04

4、内部类

内部类其中一个最明显的好处就是可以更方便的使用外部类的属性和方法。

5、压缩文件

tar.gz是linux系统下的压缩文件格式,.zip是windows下的压缩文件格式。

6、GUI

(1):我们可以在JFrame 对象中添加AWT 或者Swing 组件。JFrame中虽然有 add 方法,但是却不能直接用于添加 AWT 组件或者 Swing 组件,否则会抛出异常。因为你直接添加的话,会默认直接添加到根面板上,而内容面板则会覆盖根面板的内容。

JFrame 有一个Content Pane,窗口能显示的所有组件都是添加在这个Content Pane 中。JFrame 提供了两个方法:getContentPane 和setContentPane 就是用于获取和设置其Content Pane 的。

对JFrame添加组件有两种方式:

1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)

2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:

Jpanel contentPane=newJpanel();

……//把其它组件添加到Jpanel中;

frame.setContentPane(contentPane);

//把contentPane对象设置成为frame的内容面板

 (2):在AMT组件中分为两大类,这两类的基类分别是Component和MenuComponent,其中,MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AMT组件的父类,它表示一个能以图形化方式显示出来,并可与用户交互的对象。

   Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本组件类是按钮,文本框之类的,容器类则是通过Component的子类Container实例化的对象。Container又分为Window和Pannel,Window又分为Frame和Dialog,Frame是窗体,Dialog是对话框。Panel是中间容器。