java中GUI的awt和Swing的知识点

时间:2023-01-28 10:42:08

刚刚学习了java的GUI,写了几个程序,基本熟悉了awt和Swing,下面和大家分享一下知识点

1、JFrame的层次结构

参考:http://tieba.baidu.com/p/2004216123?see_lz=1

Frame 的最底层是 RootPane,
然后是 LayeredPane
再上面就是 ContentPane(默认放控件)
最顶层是 GlassPane(默认透明)
最顶层的 GlassPane 默认是透明的
ContentPane 就是默认盛放控件的那个层次
默认的 ContentPane 就是一个 JPanel
例如: JPanel jp=(JPanel)fr.getContentPane(); 
其实 ContentPane 是添加在 LayeredPane 上的一个控件。
而 LayeredPane 和 GlassPane 是直接添加在 RootPane 上的,
RootPane 直接添加在 JFrame 上


2、java.awt.Container
          继承者 javax.swing.JComponent
setOpaque(boolean isOpaque) //设置是否透明  透明为false

例如:
JPanel jp=(JPanel)fr.getContentPane(); 
jp.setOpaque(false);//设置透明


3、任何组建都可以设置大小和位置

例如:
bu2 = new JButton("Open");
bu2.setSize(80,40);
bu2.setLocation(20, 40);


4、只有Container容器才能设置布局 

例如:
panel.setLayout(new FlowLayout());

注意:
当传入的参数为null时,容器内的每一个控件都要设置大小和位置
例如:
panel.setLayout(null);
bu2 = new JButton("Open");
bu2.setSize(80,40);
bu2.setLocation(20, 40);



5、任何组件都可以设置字体

例如:
la2 = new JLabel("Tools For Windows8.1&10");
la2.setFont(new java.awt.Font("Dialog",1,20));

注意:
转入的字体必须是一个对象


6、给JLabel和JButton添加图标

方法一:
在对象初始化时传入一个图标
例如:
ico = new ImageIcon(this.getClass().getResource("/Image/壁纸.jpg"));
JButton jb = new JButton(ico);
方法二:
new完对象后,调用方法添加
例如:
ico = new ImageIcon(this.getClass().getResource("/Image/壁纸.jpg"));
JButton jb = new JButton();
jb.setIcon(ico);


7、如何给JFrame设置背景图片

通过JLabel来设置:
ico = new ImageIcon(this.getClass().getResource("/Image/壁纸.jpg"));
la1 = new JLabel(ico);
//设置la1距离JFrame0,0,大小为壁纸的大小
//也就是说JFrame的大小也就是壁纸的大小
la1.setBounds(0,0,ico.getIconWidth(),ico.getIconHeight());

fr.setBounds(200, 120, ico.getIconWidth(), ico.getIconHeight());
//添加壁纸
fr.getLayeredPane().add(la1,new Integer(Integer.MIN_VALUE));
//获取frame的(最上层)面板为了设置其背景颜色
JPanel jp=(JPanel)fr.getContentPane();
jp.setOpaque(false);//设置为透明后,就可以显示下一层的壁纸了,但是该层上的控件还是可以显示的
//这一步设置布局非常关键,这样设置可以用于其他组建的定位,设置为null后,每一个组建都要设置大小和位置
panel.setLayout(null);
//接下来就在panel上可以添加控件了,
//注意:
// 每一个控件都要设置大小和位置

fr.add(panel);
fr.setVisable(true);


8、可能出错的地方


1、没有fr.setVisable(true);
注意:
任何控件都可以设置为隐藏或者是显现,只是Container下的对象在new出来以后默认是隐藏的
2、添加事件后要导入包
import java.awt.event.*;