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

一、布局管理器

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

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. 数据导出之winfrom导出word(一)

    我们常会用winfrom程序开发小工具,使用dataGridView控件展示数据.同时,我们也会有将这些数据导出的需求. 本篇文章介绍了开发过程中遇到的问题. 一.引用组件 首先,需要在窗体程序中引用 ...

  2. 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别

    [源码下载] 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) ...

  3. 简单题(K-D Tree)

    简单题不简单-- 我们把单点加操作改成插入一个权值为增加量的点,将问题转化成询问一个矩阵中所有点的和,用 \(K-D\ Tree\) 维护,时间复杂度 \(O(n\sqrt{n})\) \(Code\ ...

  4. [HTML] 动态修改input placeholder的颜色

    .invalid:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: red; } .invalid::-moz-placeholder { ...

  5. 整理版jq 复习贴子

    1绝对定位(abs)与相对定位(relative) 区别是相对定位参照自己的位置进行移动(当然需要设置top left这些生效)并且原来的位置保留着 偏移后会把 其它的层遮罩住 绝对定位就是的参照位置 ...

  6. 设置iptables NAT出外网

    有时候云上部署环境,不能动态自设路由,没有公网ip地址的服务器,只能通过NAT的方式出外网,下面就记录一下设置过程. 当前状态 服务器A只有一个内网IP,不能上外网,内网IP与服务器B内网相通:服务器 ...

  7. python传输文件

    传输文件简单版 server端: import socket import struct import json import os share_dir = r'C:\py3Project\路飞\第三 ...

  8. [Leetcode]303.区域和检索&&304.二维区域和检索

    题目 1.区域和检索: 简单题,前缀和方法 乍一看就觉得应该用前缀和来做,一个数组多次查询. 实现方法: 新建一个private数组prefix_sum[i],用来存储nums前i个数组的和, 需要找 ...

  9. 执行shell脚本的四种方式(转)

    原文网址:https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法,即总结在Linux中运行shell脚本的4种方法. ...

  10. Facade外观模式(结构性模式)

    1.系统的复杂度 需求:开发一个坦克模拟系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮等各子系统构成.然后由对应的子系统调用. 常规的设计如下: #region 坦克系统组 ...