Java窗体编程(布局管理器 BorderLayout、GridLayout、事件监听)

*****************************

1.2.2

布局管理器 BorderLayout

把容器的布局分为东西南北中五个部位,默认是中间,平铺占满!

 1 package awt;
 2 
 3 import java.awt.BorderLayout;
 4 import java.awt.Button;
 5 import java.awt.Frame;
 6 
 7 public class TestBorderLayout {
 8 
 9     public static void main(String[] args) {
10         // TODO 自动生成的方法存根
11         Frame f= new Frame("Border Layout!");
12         Button bn= new Button("BN");
13         Button bs = new Button("BS");
14         Button bw = new Button("BW");
15         Button be = new Button("BE");
16         Button bc = new Button("BC");
17         f.add(bn,BorderLayout.NORTH);
18         f.add(bs,BorderLayout.SOUTH);
19         f.add(bw,BorderLayout.WEST);
20         f.add(be,BorderLayout.EAST);
21         f.add(bc,BorderLayout.CENTER);
22         f.setBounds(200, 300, 300, 200);
23         f.setVisible(true);
24         
25     }
26 
27 }

 

 

 

Frame  的默认布局管理器就是BorderLayout

BorderLayout  可以添加容器组件和基本组件

有两个构造方法:① 不带参数  ② 带参数  设置水平垂直间距   BorderLayout ( int hgap,int vgap  ); 默认间距是0;

*************************

1.2.3 GridLayout

矩阵网形式布局,网格控制布局,容器被分成大小相等的矩形,一个矩形中放一个组件。

 1 package awt;
 2 
 3 import java.awt.Button;
 4 import java.awt.Frame;
 5 import java.awt.GridLayout;
 6 
 7 public class TestGridLayout {
 8 
 9     public static void main(String[] args) {
10         // TODO 自动生成的方法存根
11         Frame f=new Frame("GridLayout Example");
12         Button b1= new Button("按键1");
13         
14         Button b2=new Button("按键2");    
15         Button b3 =new Button("按键3");
16         Button b4=new Button("按键4");
17         Button b5 =new Button("按键5");
18         Button b6 =new Button("按键6");
19         Button b7 =new Button("按键7");
20         f.setLayout(new GridLayout(3,3));
21         f.add(b1);
22         f.add(b2);
23         f.add(b3);
24         f.add(b4);
25         f.add(b4);
26         f.add(b5);
27         f.add(b6);
28         f.add(b7);
29         f.setSize(500,400);
30         f.setLocation(300,500);
31         f.setVisible(true);
32     
33     
34     }
35     
36 
37 }

 

 

 

 

 

 

*****************

1.3.1 事件处理

完成事件处理有三个重要的对象:事件源,监听器,事件对象。

不同的监听接口:

ActionListener : 按钮和菜单

WindowListener : 窗口

MouseListener : 鼠标

 1 package awt;
 2 
 3 import java.awt.Button;
 4 import java.awt.Frame;
 5 import java.awt.event.ActionEvent;
 6 import java.awt.event.ActionListener;
 7 
 8 public class TestActionEvent {
 9     
10     public static void main(String[] args) {
11         // TODO 自动生成的方法存根
12         Frame f= new Frame("TestActionEvent");
13         Button b1= new  Button("b1");
14         Button b2=new Button("b2");
15         Monitor m=new Monitor();
16         b1.addActionListener(m);
17         b2.addActionListener(m);
18         b2.setActionCommand("Game over!");
19         f.add(b1,"North");
20         f.add(b2,"Center");
21         f.setLocation(500,500);
22         f.setSize(300,300);
23         f.pack();
24         f.setVisible(true);
25         f.setResizable(false);
26     }
27 
28 }
29 class Monitor implements ActionListener{
30     public void actionPerformed(ActionEvent e) {
31         System.out.println("A button has been pressed");
32         System.out.println("The relative info is :"+e.getActionCommand());
33     }
34     Monitor (){};
35 }

/*
* 创建监听类实现监听接口
* 设置函数传入 事件处理 ActionListener e
*
* getActionCommand函数 传入文字显示结果
*
*
* 组件调用 addActionListener() 函数 把监听类的实例化对象 传入
*
* b1.addActionListener(m);
*/


 


 

 

 

*************************************

 

1.3.2 文本框的事件处理

文本框组件    TextField   在文本框中按回车键 也会触发ActionEvent 事件,用TextListener 接口的类监听 TextEvent 事件。

 1 package awt;
 2 
 3 import java.awt.Color;
 4 import java.awt.Frame;
 5 import java.awt.TextField;
 6 import java.awt.event.ActionEvent;
 7 import java.awt.event.ActionListener;
 8 import java.awt.event.TextEvent;
 9 import java.awt.event.TextListener;
10 
11 public class TFActionEvent {
12 
13     public static void main(String[] args) {
14         // TODO 自动生成的方法存根
15         new TextFeildFrame();
16     }
17 
18 }
19 class TextFeildFrame extends Frame{
20     TextField tf;
21     public TextFeildFrame() {
22         tf=new TextField();
23         tf.addActionListener(new TFActionListener());
24         tf.addTextListener(new TFTextListener());
25         this.add(tf);
26         this.setBackground(Color.BLUE);
27         this.setBounds(300,300,300,300);
28         this.pack();
29         this.setVisible(true);
30     }
31     
32     
33     
34     class TFTextListener  implements TextListener{
35         public void textValueChanged(TextEvent e) {
36             System.out.println("Change:");
37             System.out.println(tf.getText());
38             
39         }
40     }
41     
42     
43     class TFActionListener implements ActionListener{
44         public void actionPerformed(ActionEvent e) {
45             TextField tf= (TextField)e.getSource();
46             System.out.println("Enter pressed:"+tf.getText());
47             tf.setText("");
48             
49         }
50     }
51 }

 

 

 

 

###############

在文本框中按回车也会触发ActionEvent 事件,还有就是文本框内容的改变也会触发。

TextListener接口只有一个方法 :   textValueChanged()    参数是一个 TextEvent对象。

————————————————————————————————————————

1.4  适配器

1.4.1 窗口事件处理

AWT 中处理窗口的是  WindowEvent   要实现  WindowListener 接口

一共对应七个事件

 1 package awt;
 2 
 3 import java.awt.Frame;
 4 import java.awt.event.WindowAdapter;
 5 import java.awt.event.WindowEvent;
 6 
 7 public class TestWindowAdapter {
 8 
 9     public static void main(String[] args) {
10         // TODO 自动生成的方法存根
11         new MFrame();
12     }
13 }
14 @SuppressWarnings("serial")
15 class MFrame extends Frame{
16     MFrame(){
17         setBounds(300,300,400,300);
18         this.addWindowListener(new WindowMonitor());
19         setVisible(true);
20     }
21     class WindowMonitor extends WindowAdapter{
22         public void windowClosing(WindowEvent e) {
23             setVisible(false);
24             System.exit(0);
25         }
26     }
27 }
生成一个窗口可以关闭
WindowMonitor继承了WindowAdapter适配器,这样就不用实现接口的所有函数了。

 

 

 

 

posted @ 2020-10-09 20:44  靠谱杨  阅读(203)  评论(0编辑  收藏  举报