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

一、布局管理器

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

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. 58VIP账号发贴器

    因公司有招聘大量普工需求,需要大量简历资源,直接从58买一份简历动辄几块到几十块,如果做精准少则1块以上的点击.而且收到的简历不太精准,应公司需求写了一款自动发贴器.完全模拟人工发贴,经过一个月的测试 ...

  2. 解决网页出现 net::ERR_ABORTED 404 (Not Found)问题

    1.在web.config配置文件中添加woff字体的MIME类型 在Web.config中的system.webServer节点添加 <staticContent> <remove ...

  3. PICE(1):Programming In Clustered Environment - 集群环境内编程模式

    首先声明:标题上的所谓编程模式是我个人考虑在集群环境下跨节点(jvm)的流程控制编程模式,纯粹按实际需要构想,没什么理论支持.在5月份的深圳scala meetup上我分享了有关集群环境下的编程模式思 ...

  4. JavaScript对象与JSON字符串的相互转换

    JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集.正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中. eval函数 ...

  5. C#6.0语言规范(十六) 异常

    C#中的异常提供了一种结构化,统一且类型安全的方法来处理系统级和应用程序级错误条件.C#中的异常机制与C ++的异常机制非常相似,但有一些重要的区别: 在C#中,所有异常必须由派生自的类类型的实例表示 ...

  6. Data - Hadoop单机配置 - 使用Hadoop2.8.0和Ubuntu16.04

    系统版本 anliven@Ubuntu1604:~$ uname -a Linux Ubuntu1604 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb ...

  7. Linux - APT包管理

    dpkg与apt dpkg用来安装本地deb格式软件包,但不会解决软件包的依赖关系. APT(Advanced Packaging Tool)是从更新源获取并安装软件包,而且会解决依赖关系, 但不会安 ...

  8. Django 模版过滤器

    模版常用过滤器 在模版中,有时候需要对一些数据进行处理以后才能使用.一般在Python中我们是通过函数的形式来完成的.而在模版中,则是通过过滤器来实现的.过滤器使用的是|来使用.比如使用add过滤器, ...

  9. 前端基础——css

    前端基础——css css的内容主要包括:盒子模型.定位.单位与取值.属性.选择器.

  10. MySQL数据导入到Mongo

    背景:如题干所述,需要将一份数据导入到mongo数据库,减少项目依赖的数据源. 解决方案: 使用mongo自带的mongoimport工具. 首先在test库里创建一个空集合:[import_test ...