接着前两篇学习笔记,这篇主要介绍布局管理器和对话框两部分内容。

一、布局管理器

先拿一个小例子来引出话题,就按照我们随意的添加两个按钮来说,会产生什么样的效果,看执行结果。

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编程(三)的更多相关文章

  1. java基础—GUI编程(一)

    一.AWT介绍

  2. Java基础——GUI编程(四)

    继前面的,这篇主要记录菜单和文件对话框的两个小练习,来熟悉一下方法的应用,一些简单的逻辑和Swing的相关简介,以及关于GUI基础的记录. 一.创建一个菜单 import java.awt.FlowL ...

  3. java基础—GUI编程(二)

    一.事件监听

  4. Java基础——GUI编程(一)

    一.定义 GUI全称是Graphical User Interface,即图形用户界面.JDK中提供了AWT 和 Swing 两个包,用于GUI程序的设计和开发. 1.java .awt  abstr ...

  5. Java基础——GUI编程(二)

    一.事件监听机制 -- 事件源:awt 或swing包中的那些图形界面组件,即发生事件的组件 -- 事件:Event  用户对组件的一个操作 -- 监听器:Listener  负责处理事件的方法 二. ...

  6. 【Java】GUI编程

    GUI编程 前言 某koukou老师的任务罢了,好在狂神老师居然有GUI的课,只能说是有救星了. [狂神说Java]GUI编程入门到游戏实战 最好笑的是,老师要求掌握的居然是14年的知识,就连狂神在上 ...

  7. 1.JAVA之GUI编程概述

          下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式:                             ...

  8. 5.JAVA之GUI编程窗体事件

    我们回顾下第三篇时的内容: 在3.JAVA之GUI编程Frame窗口中窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉. 现在我们就来解决下这个问题. ******************* ...

  9. 10.JAVA之GUI编程弹出对话框Dialog

    在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...

随机推荐

  1. WPF实战案例-打印

    在前段时间做了一下打印,因为需要支持的格式比较多,所以wpf能打印的有限分享一下几种格式的打印(.xls .xlsx .doc .docx .png .jpg .bmp .pdf) 首先为了保证exc ...

  2. 01_python_初始python

    一.初始python python是一门解释型语言,弱类型语言 / python解释器最为常用的是cpython(官方) 弱类型语言:   a = 1 a = 'alex'   #说明变量a既可以是整 ...

  3. Spring学习笔记2——表单数据验证、文件上传

    在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...

  4. Swift5 语言指南(二十八) 高级运算符

    除了Basic Operators中描述的运算符之外,Swift还提供了几个执行更复杂值操作的高级运算符.这些包括C和Objective-C中您熟悉的所有按位和位移运算符. 与C中的算术运算符不同,S ...

  5. 怎么把excel表格内的数据导入数据库?

    第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后 ...

  6. Golang 中哪些值是不可以寻址的

    不可以寻址, 指的是不能通过&获得其地址. golang中不能寻址的可以总结为:不可变的,临时结果和不安全的.只要符合其中任何一个条件,它就是不可以寻址的. 具体为: 常量的值. 基本类型值的 ...

  7. widows下 python环境变量配置

    widows下 python环境变量配置 便于cmd命令行操作,例如:直接进入Python解释器环境.使用pip安装模块等.

  8. centos系统(ssh)登录缓慢(输入账户密码后需要等待若干时间)

    现象:打开ssh连接工具,输入用户名密码,需要等待约3分钟才能进入系统,进入系统后操作都很流畅,同时top查看系统消耗也很低! 解决:在百度和谷歌搜索大量解决方案,都是如下解决方案: #取消ssh的反 ...

  9. 关于C++11中的std::move和std::forward

    std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::st ...

  10. TCP/IP 笔记 - 概述

    Effective communication depends on the use of a common language. 有效沟通取决于使用共同的语言 . TCP/IP协议族 一系列相关协议的 ...