java中的AWT编程
2021/11/1 1:11:50
本文主要是介绍java中的AWT编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
AWT编程
- AWT简介
- AWT定义
- AWT的继承体系
- Container的继承体系
- AWT使用
- Window,Panel,ScrollPane的使用
- 布局管理器
- FlowLayout
- BorderLayout
- GridLayout
- GridBagLayout
- CardLayout
- BoxLayout
- Box容器
- AWT中的基本组件
AWT简介
AWT定义
AWT:一个GUI类库,抽象窗口工具集(CAbstract Window Toolkit)
使用AWT创建的图形界面应用和所在的运行平台有相同的界面风格
AWT的继承体系
Componet:
代表一个能以图片化形式显示出来,并可与用户交互的对象,例如Button代表一个按钮,TextField代表一个文本框等;
MenuComponent:
代表图形界面的菜单组件,包括MenuBar(菜单条)、MenuItem(菜单项)等子类
Container:
是一种特殊的Componet,它代表一种容器,可以盛装普通的Component
Container的继承体系
AWT使用
Window,Panel,ScrollPane的使用
- Window是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局
- Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局
- ScrollPane是一个带滚动条的容器,它也不能独立存在,默认使用BorderLayout管理其内部组件布局
可能出现的中文编码问题解决办法:
- -Dfile.encoding=GBK
Window:
public class WindowDemo { public static void main(String[] args) { Frame frame = new Frame("window"); frame.setLocation(100, 100); //设置位置 frame.setSize(500, 300); //设置窗口大小 frame.setVisible(true); // 设置可见 } }
Panel:
public class PanelDemo { public static void main(String[] args) { //Panel对象必须依附于Window //创建window对象 Frame frame = new Frame("panel"); //创建Panel对象 Panel panel = new Panel(); panel.add(new TextField("textField")); // 添加文本框 panel.add(new Button("button")); // 添加按钮 //panel添加到window中 frame.add(panel); //设置window位置和大小 frame.setBounds(100, 100, 500, 300); //设置window可见 frame.setVisible(true); } }
ScrollPane:
public class ScrollPanelDemo { public static void main(String[] args) { //创建window对象 Frame frame = new Frame("ScrollPane"); //创建Panel对象 ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); //设置滚动条总是显示 scrollPane.add(new TextField("textField")); scrollPane.add(new Button("button")); //panel添加到window中 frame.add(scrollPane); //设置window位置和大小 frame.setBounds(100, 100, 500, 300); //设置window可见 frame.setVisible(true); } }
布局管理器
- LayoutMananger布局管理器可以根据运行平台来自动调整组件大小
FlowLayout
- 从左向右排列所有组件,遇到边界就会折回下一行重新开始
public class FlowLayoutDemo { public static void main(String[] args) { Frame frame = new Frame("FlowLayout"); // 设置布局管理器并且左对齐,水平和垂直间距都是20 frame.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 20)); for (int i = 0; i < 100; i++) { frame.add(new Button("button" + i)); } //设置最佳大小 frame.pack(); frame.setVisible(true); } }
BorderLayout
- 将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个区域,普通组件可以被放置在这五个区域中的任意一个
- 当改变使用BorderLayout的容器大小时,NORTH,SOUTH和CENTER区域水平调整,而EAST,WEST和CENTER区域垂直调整
- 添加组件时,需要指定添加到哪个区域中,如果没有指定添加到哪个区域中,则默认添加到中间区域中
- 如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件
public class BorderLayoutDemo { public static void main(String[] args) { Frame frame = new Frame("BorderLayout"); // 水平间距30, 垂直间距10 frame.setLayout(new BorderLayout(30, 10)); frame.add(new Button("North"), BorderLayout.NORTH); frame.add(new Button("South"), BorderLayout.SOUTH); frame.add(new Button("East"), BorderLayout.EAST); frame.add(new Button("West"), BorderLayout.WEST); frame.add(new Button("Center"), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } }
GridLayout
- 将容器分割成纵横线分割的网格,每个网格所占的区域大小相同
- 添加组件时,默认从左向右,从上向下依次添加到每个网格中
public class GridLayoutDemo { public static void main(String[] args) { Frame frame = new Frame("GridLayout"); // 添加输入文本框 Panel p_text = new Panel(); p_text.add(new TextField(30)); frame.add(p_text, BorderLayout.NORTH); //添加数组 Panel p_num = new Panel(); // 3行5列 p_num.setLayout(new GridLayout(3, 5, 4, 4)); for (int i = 0; i < 10; i++) { p_num.add(new Button(String.valueOf(i))); } p_num.add(new Button("+")); p_num.add(new Button("-")); p_num.add(new Button("*")); p_num.add(new Button("/")); p_num.add(new Button(".")); frame.add(p_num); frame.pack(); frame.setVisible(true); } }
GridBagLayout
- 与GridLayout形似,但该布局可以占据多个网格
CardLayout
- 将加入容器的所有组件看成一叠卡片,每次只有最上面的组件可见。
public class CardLayoutDemo { public static void main(String[] args) { Frame frame = new Frame("CardLayout"); CardLayout cardLayout = new CardLayout(); //中间区域panel Panel p1 = new Panel(); p1.setLayout(cardLayout); String[] names = {"第一张","第二张","第三张","第四张","第五张"}; for (int i = 0; i < names.length; i++) { p1.add(names[i], new Button(names[i])); } frame.add(p1); //五个按钮区域 Panel p2 = new Panel(); Button b1 = new Button("上一张"); Button b2 = new Button("下一张"); Button b3 = new Button("第一张"); Button b4 = new Button("最后一张"); Button b5 = new Button("第三张"); //创建事件监听器,监听按钮的点击动作 ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { // 获取到按钮上的文字 String actionCommend = actionEvent.getActionCommand(); switch (actionCommend) { case "上一张": cardLayout.previous(p1); break; case "下一张": cardLayout.next(p1); break; case "第一张": cardLayout.first(p1); break; case "最后一张": cardLayout.last(p1); break; case "第三张": cardLayout.show(p1, "第三张"); break; } } }; //把事件监听器和按钮绑定到一起 b1.addActionListener(listener); b2.addActionListener(listener); b3.addActionListener(listener); b4.addActionListener(listener); b5.addActionListener(listener); p2.add(b1); p2.add(b2); p2.add(b3); p2.add(b4); p2.add(b5); frame.add(p2, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } }
BoxLayout
- 可以在垂直和水平两个方向上拜访GUI组件
public class BoxLayoutDemo { public static void main(String[] args) { Frame frame = new Frame("BoxLayout"); //创建BoxLayout对象,该对象存放的组件是垂直存放 BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS); frame.setLayout(boxLayout); frame.add(new Button("button1")); frame.add(new Button("button2")); frame.pack(); frame.setVisible(true); } }
Box容器
- 该容器默认布局管理器是BoxLayout,大多数情况下,使用Box容器容纳多个GUI组件,然后再把Box容器作为一个组件,添加到其他的容器中,从而形成整体窗口布局。
public class BoxDemo { public static void main(String[] args) { Frame frame = new Frame("Box"); //创建水平排列组件的Box容器 Box hBox = Box.createHorizontalBox(); hBox.add(new Button("h_button1")); hBox.add(Box.createHorizontalGlue()); // 在两个方向上拉伸 hBox.add(new Button("h_button2")); hBox.add(Box.createHorizontalStrut(30)); //固定分割长度 hBox.add(new Button("h_button3")); //创建垂直排列组件的Box容器 Box vBox = Box.createVerticalBox(); vBox.add(new Button("v_button1")); vBox.add(Box.createVerticalGlue()); vBox.add(new Button("v_button2")); vBox.add(Box.createVerticalStrut(30)); vBox.add(new Button("v_button3")); //添加到frame中 frame.add(hBox, BorderLayout.NORTH); frame.add(vBox); frame.pack(); frame.setVisible(true); } }
AWT中的基本组件
组件名 | 功能 |
---|---|
Button | 按钮 |
Canvas | 用于绘图的画布 |
Checkbox | 复选框组件(也可当单元框组件使用) |
CheckboxGroup | 用于将多个Checkbox组件组合成一组,一组Checkbox组件将只有一个被选中,即全部变成单选框组件 |
Choice | 下拉选择框 |
Frame | 窗口,在GUI程序里通过该类创建窗口 |
Label | 标签类,用于放置提示性文本 |
List | 列表框组件,可以添加多项条目 |
Panel | 不能单独存在基本容器类,必须放在其他容器中 |
Scrollbar | 滑动条组件。如果需要用户输入位于某个范围的值,就可以使用滑动条组件,比如调色板中设置RGB的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、滑块的大小、最小值和最大值。 |
ScrollPane | 带水平及垂直滑动条的容器组件 |
TextArea | 多行文本域 |
TextField | 单行文本域 |
public class BasicComponentDemo { Frame frame = new Frame("基本组件"); //多行文本区域 TextArea ta = new TextArea(5, 20); //下拉选择框 Choice colorChooser = new Choice(); //选择框 CheckboxGroup cbg = new CheckboxGroup(); Checkbox male = new Checkbox("男", cbg, true); Checkbox female = new Checkbox("女", cbg, false); //选择框 Checkbox isMarried = new Checkbox("是否已婚?"); //单行文本区域 TextField tf = new TextField(50); Button ok = new Button("确认"); //列表框 List colorList = new List(6, true); public void init(){ //组装底部 Box bBox = Box.createHorizontalBox(); bBox.add(tf); bBox.add(ok); frame.add(bBox, BorderLayout.SOUTH); //组装选择部分 colorChooser.add("红色"); colorChooser.add("蓝色"); colorChooser.add("绿色"); Box cBox = Box.createHorizontalBox(); cBox.add(colorChooser); cBox.add(male); cBox.add(female); cBox.add(isMarried); frame.add(cBox); //组装文本域和选择部分 Box topLeft = Box.createVerticalBox(); topLeft.add(ta); topLeft.add(cBox); frame.add(topLeft); //组装顶部左边和列表框 Box top = Box.createHorizontalBox(); colorList.add("红色"); colorList.add("绿色"); colorList.add("蓝色"); top.add(topLeft); top.add(colorList); frame.add(top); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { BasicComponentDemo bc = new BasicComponentDemo(); bc.init(); } }
这篇关于java中的AWT编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门