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

一、布局管理器

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

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. CODE FIRST之空数据模型

    1.首先添加空Code Firtst模型 2.新建两个实体类,关系一对多 public class UserInfo { public UserInfo() { OrderInfo = new Has ...

  2. asp.net mvc+httpclient+asp.net mvc api入门篇

    第一步:创建一个ASP.NET MVC API项目 第二步:在api项目里面创建一个类 public class Student { public int Id { get; set; } publi ...

  3. ovs-appctl 命令合集

    通用命令 exit 优雅关闭ovs-vswitchd进程 qos/show interface 查询内核中关于qos的配置以及和给出端口有关的状态 cfm/show [interface]显示在指定端 ...

  4. 【BZOJ3551】 [ONTAK2010]Peaks加强版

    BZOJ3551 [ONTAK2010]Peaks加强版 Solution Kruscal重构树后发现可以对于小于的离散化然后倍增+主席树找到上一个的可行解. 然后就可以了. 如果数组开的不好,容易在 ...

  5. java实现点选汉字验证码

    package com.rd.p2p.web; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; im ...

  6. 通过Metasploit生成各种后门

    生成windows后门 1.首先生成后门 [root@localhost ~]# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ ...

  7. 学习人工智还死拽着Python不放?大牛都在用Anaconda5.2.0

    前言 最近有很多的小白想学习人工智能,可是呢?依旧用Python在学习.我说大哥们,现在都什么年代了,还在把那个当宝一样拽着死死不放吗?懂的人都在用Anaconda5.2.0,里面的功能可强大多了,里 ...

  8. 前端基础-html 字体标签,排版标签,超链接,图片标签

    主要内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...

  9. 一步步Cobol 400上手自学入门教程04 - 过程部

    过程部的作用:编写程序要执行的语句,是程序的核心. 结构: 基本语句 INITIALIZE 设置数据项的初始值 ACCEPT 接收从键盘或指定设备上获得输入数据. 例子: 当批处理文件读到调用ACCP ...

  10. Nginx实现tomcat集群进行负载均衡

    一.背景 随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问 ...