Java基础——GUI编程(三)
接着前两篇学习笔记,这篇主要介绍布局管理器和对话框两部分内容。
一、布局管理器
先拿一个小例子来引出话题,就按照我们随意的添加两个按钮来说,会产生什么样的效果,看执行结果。
import java.awt.Button;
import java.awt.Frame; public class Test25 {
public static void main(String[] args) {
Frame f = new Frame("布局管理器");
f.setSize(300, 400);
f.add(new Button("按钮A"));
f.add(new Button("按钮B"));
f.setVisible(true);
}
}
执行结果:

从运行程序中,只看到了第二个按钮B。
原因是每个组件,在容器中都有一个具体的位置和大小,想在容器中排列组件时很难确定其位置,为简化用户的控制,Java采取布局管理器进行管理可以为容器指定不同的布局管理器。
1.BorderLayout (边界布局,默认的模式) 将容器分为东南西北中五个区域
Frame f=new Frame("布局管理器");
f.add(new Button("按钮A"),BorderLayout.NORTH);
f.add(new Button("按钮B"));
f.add(new Button("按钮C"),"East");
f.setBounds(20,20,300,300);
f.setVisible(true);
2. FlowLayout 从左到右,从上到下,如果我们在FlowLayout布局中加入 "North","East" 之类的参数,将被忽略
Frame f=new Frame("布局管理器");
f.setLayout(new FlowLayout() );
f.add(new Button("按钮A"),BorderLayout.NORTH);
f.add(new Button("按钮B"));
f.add(new Button("按钮B"));
3. GridLayout 网格,从左到右,从上到下,该布局总是忽略组件的最佳大小,所有单元的宽度是相同的
4.CardLayout 选项卡布局
5.GridBagLayout 布局之王,功能强大,使用复杂,
6.BoxLayOut Swing 中新增的一种布局管理器,允许多个组件全部垂直或水平摆放,嵌套多个该布局管理器的Panel,可以实现类似
7.GridBagLayout 的功能,但要比使用 GridBagLayOut 简单的多
比较复杂点的代码例子(目的是左边一列三行网格布局,右边选项卡布局,并且左边的按钮按下会引发右边相应变化)
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; //布局的例子
class LayoutTest {
public LayoutTest() {
init();
} CardLayout cl = new CardLayout(); // 卡片布局
Panel plCenter = new Panel(); // 面板,容器 private void init() {
Frame f = new Frame();
Panel plWest = new Panel(); plWest.setBackground(Color.pink);
plCenter.setBackground(Color.DARK_GRAY); f.add(plWest, BorderLayout.WEST); // 往左边放
f.add(plCenter); plWest.setLayout(new GridLayout(3, 1)); // 网格布局,三行,一列
Button btnPrev = new Button("前一个");
Button btnNext = new Button("后一个");
Button btnThree = new Button("第三个"); plWest.add(btnPrev);
plWest.add(btnNext);
plWest.add(btnThree); plCenter.setLayout(cl); // 中间的主面板,设为卡片布局
plCenter.add(new Button("A"), "1AAA");
plCenter.add(new Button("B"), "2AAA");
plCenter.add(new Button("C"), "3AAA");
plCenter.add(new Button("D"), "4AAA");
plCenter.add(new Button("E"), "5AAA");
plCenter.add(new Button("F"), "6AAA"); // 用于按钮事件处理的内部类 class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("前一个")) {
cl.previous(plCenter);
} else if (e.getActionCommand().equals("后一个")) {
cl.next(plCenter);
} else if (e.getActionCommand().equals("第三个")) {
cl.show(plCenter, "5AAA"); // 指定显示哪一个
} }
} MyActionListener listener = new MyActionListener(); btnPrev.addActionListener(listener);
btnNext.addActionListener(listener);
btnThree.addActionListener(listener); f.setSize(300, 300);
f.setVisible(true); f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} } class Test26 {
public static void main(String[] args) {
new LayoutTest();
}
}

注意:取消布局管理器(代码例子如下)
可以使用绝对座标的方式来指定组件的位置和大小,这时,我们要调用Container.setLayout(null), 然后再调用 Container.setBounds()方法。
import java.awt.Button;
import java.awt.Frame; public class Test27 {
// 例子,自定义按钮的位置
public static void main(String[] args) {
Frame f = new Frame();
f.setSize(500, 400); f.setLayout(null); // 取消布局管理器
Button btn = new Button("这是按钮");
btn.setBounds(50, 50, 80, 40);
f.add(btn); f.setVisible(true);
}
}
二、对话框(Dialog)
对话框在我们日常用电脑时经常见到,不再赘述。直接上代码例子,熟练一下应用。
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File; public class Test28 {
public static void main(String[] args) {
new MyWindow();
}
} class MyWindow {
MyWindow() {
init();
} private Dialog dlg; // 对话框
private Label lblMsg; // 标签 private Frame f;
private Button btn;
private TextField txtDir; // 用来输入目录名称
private TextArea txtFileList; // 用来显示文件列表 private void init() {
f = new Frame("目录查看器");
f.setBounds(30, 30, 400, 400);
f.setLayout(new FlowLayout()); txtDir = new TextField(30); // 30个字符长度
btn = new Button("显示文件");
txtFileList = new TextArea(20, 35); // 用来显示文件列表的区域 f.add(txtDir);
f.add(btn);
f.add(txtFileList); dlg = new Dialog(f, "提示信息"); // 这个true代表它是否是模态的
//如果是dlg=new Dialog(f, "提示信息",true),代表弹出来对话框以后,就不可以再对后面的对话框进行操作了
lblMsg = new Label("输入的目录不正确");
dlg.add(lblMsg);
dlg.setBounds(200, 200, 250, 100);
dlg.setLayout(new FlowLayout()); initEvent();
f.setVisible(true); } private void initEvent() {
dlg.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
((Dialog) e.getSource()).setVisible(false);
// dlg.setVisible(false);
};
});
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txtFileList.setText("");
String dirStr = txtDir.getText(); // 取出用户输入的路径
File file = new File(dirStr);
if (file.isDirectory() && file.exists()) {
String[] fileNameList = file.list(); for (String s : fileNameList) {
txtFileList.append(s + "\r\n"); // 不要忘了加换行符
}
} else {
// txtFileList.append("你输入的都是啥?");
dlg.setVisible(true);
}
}
});
}
}
Java基础——GUI编程(三)的更多相关文章
- java基础—GUI编程(一)
一.AWT介绍
- Java基础——GUI编程(四)
继前面的,这篇主要记录菜单和文件对话框的两个小练习,来熟悉一下方法的应用,一些简单的逻辑和Swing的相关简介,以及关于GUI基础的记录. 一.创建一个菜单 import java.awt.FlowL ...
- java基础—GUI编程(二)
一.事件监听
- Java基础——GUI编程(一)
一.定义 GUI全称是Graphical User Interface,即图形用户界面.JDK中提供了AWT 和 Swing 两个包,用于GUI程序的设计和开发. 1.java .awt abstr ...
- Java基础——GUI编程(二)
一.事件监听机制 -- 事件源:awt 或swing包中的那些图形界面组件,即发生事件的组件 -- 事件:Event 用户对组件的一个操作 -- 监听器:Listener 负责处理事件的方法 二. ...
- 【Java】GUI编程
GUI编程 前言 某koukou老师的任务罢了,好在狂神老师居然有GUI的课,只能说是有救星了. [狂神说Java]GUI编程入门到游戏实战 最好笑的是,老师要求掌握的居然是14年的知识,就连狂神在上 ...
- 1.JAVA之GUI编程概述
下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式: ...
- 5.JAVA之GUI编程窗体事件
我们回顾下第三篇时的内容: 在3.JAVA之GUI编程Frame窗口中窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉. 现在我们就来解决下这个问题. ******************* ...
- 10.JAVA之GUI编程弹出对话框Dialog
在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...
随机推荐
- 3.怎样将ASP.NET MVC应用程序发布到IIS
这一篇,教大家怎么将ASP.NET MVC应用程序发布到本地或者IIS中.打开上一篇创建的ASP.NET MVC 5.0应用程序.[PS:上一篇--->2.第一个ASP.NET MVC 5.0应 ...
- 【转】AngularJs HTTP请求响应拦截器
任何时候,如果我们想要为请求添加全局功能,例如身份认证.错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段. angularJs通过拦截器提供了一个从全局层面进行处理的途 ...
- PKI信息安全知识点
1. 什么是X.509? X.509标准是ITU-T设计的PKI标准,他是为了解决X.500目录中的身份鉴别和访问控制问题设计的. 2. 数字证书 数字证书的意义在于回答公钥属于谁的问题,以帮助用户安 ...
- Redis---skipList(跳跃列表)
1. 概述 跳跃表是一种有序的数据结构, 他通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的. 大部分情况下, 跳跃表的效率可以和平衡树相媲美. Redis中只在两处用到了跳跃 ...
- eslint 配置及规则说明
中文官方网站 安装 可以全局安装,也可以在项目下面安装. 如下是在项目中安装示例,只需要在 package.json 中添加如下配置,并进行安装: “eslint”: “^4.11.0” 配置 配置方 ...
- select2插件使用小记2 - 多选联动 - 笔记
这是select2插件使用的第二篇,可参考第一篇 select2插件使用小记.上一篇主要是关于基本的使用,这篇主要是关于多选,及联动的.侧重点不同. 效果图如下: 遵从W3C标准:结构.样式.行为.以 ...
- mysql之视图,存储过程,触发器,事务
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...
- 前端安全 -- XSS攻击
XSS漏洞是最广泛.作用最关键的web安全漏洞之一.在绝大多数网络攻击中都是把XSS作为漏洞链中的第一环,通过XSS,黑客可以得到的最直接利益就是拿到用户浏览器的cookie,从而变相盗取用户的账号密 ...
- 如何在Ubuntu 14.04上利用jexus搭建支持php+mysql数据库的网站服务
准备部分:sudo apt-get update sudo apt-get install unzip -y第一部分:安装jexus 在终端运行以下命令 cd /tm ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...