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适配器,这样就不用实现接口的所有函数了。
好看请赞,养成习惯:) 本文来自博客园,作者:靠谱杨, 转载请注明原文链接:https://www.cnblogs.com/rainbow-1/p/13788382.html
欢迎来我的51CTO博客主页踩一踩 我的51CTO博客
文章中的公众号名称可能有误,请统一搜索:靠谱杨的秘密基地
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具