Java
Download
1 / 196

Java ?????? - PowerPoint PPT Presentation


  • 189 Views
  • Updated On :

Java 语言程序设计. 上海大学春季学期. 教学参考书. 实践大师: JAVA 2 编程篇 JAVA 2 Programmer ’ s Interactive Workbook 电子工业出版社 文字 JAVA 面向对象程序设计教程 清华大学出版社 Java 语言导学 机械工业出版社. 实验教学指导书. 《JAVA 与 面向对象程序设计实验指导与习题集 》 清华大学出版社. 教学安排. 上课: 周三下午 1~2 节 上机: 周三下午 3~4 节 (第二周开始上机 C420 、 421 ). 学 习 方 法.

Related searches for Java ??????

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Java ??????' - lelia


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Java

Java语言程序设计

上海大学春季学期


Java
教学参考书

  • 实践大师:JAVA 2 编程篇JAVA 2 Programmer’s Interactive Workbook电子工业出版社文字

  • JAVA 面向对象程序设计教程

    清华大学出版社

  • Java语言导学

    机械工业出版社


Java
实验教学指导书

《JAVA与 面向对象程序设计实验指导与习题集》

清华大学出版社


Java
教学安排

上课:周三下午1~2节

上机:周三下午3~4节

(第二周开始上机C420、421)


Java

学 习 方 法

Not to study, But to learn.

少做笔记,多听、多动手。


Java

课 程 考 试

平时情况与考试情况相结合

书面考试与上机实验相结合


Getting started
第一章 Getting Started

  • 1. 关于Java技术

  • 2 . Java开发工具包的安装与配置

  • 3. Java程序的建立、编译与运行

  • 4. 程序HelloWorld的分析


1 1 java
1.1 关于Java技术

IT 界到处都在谈论Java技术,但是Java技术到底是什么?下面我们介绍Java编程语言和Java平台。


1 1 1 java
1.1.1 Java编程语言

Java编程语言是一种高级编程语言,它具有如下性质:

• 简单 Simple • 稳固 Robust

• 高性能 High performance •安全 Secure

• 面向对象 Object oriented

• 多线程 Multithreaded •动态 Dynamic

•分布式Distributed

• 与平台无关 Platform independent

• 解释 Interpreted •轻便 Portable


1 1 1 java1
1.1.1 Java编程语言

对于大多数语言,要运行程序,要么编译程序要么解释程序;而Java语言的程序则既要被编译又要被解释。

  • 编译程序将Java源程序翻译为字节码(bytecode)程序;

  • 解释程序Java虚拟机分析并运行字节码程序。

    一次编写,处处运行

    Write once,run anywhere!


Java
Java源程序先被编译、后被解释



1 1 2 java
1.1.2 Java平台

• 平台(Platform)是程序在其中运行的硬件或软件环境。

• 最流行平台:Windows 2000, Linux,

Solaris, MacOS

• Java平台:一种运行在其它硬件平台上纯软件

平台,它有两个组件:

Java虚拟机(Java VM)和

Java应用编程接口(Java API)


1 1 2 java1
1.1.2 Java平台

• Java VM是Java平台的基础

• Java API是预先建立的软件组件的集合,提供丰富的功能,如GUI部件。 Java API被分为相关类和接口的库,这些库称为包(package)


Java api java vm
Java API和Java VM将程序与硬件分离


1 1 3 java
1.1.3 Java技术可以做什么

• Java程序的常见类型是Applet和Application

• Java平台的每种完整实现均提供如下功能:

  • 基本内容:对象、字符串、线程、输入/输出、数据结构、系统属性、日期、时间等;

  • Applets:与Java applet使用的一组约定;

  • 连网:URL、传输控制协议(TCP)、用户数据报协议(UDP)套接字和IP地址。

  • 国际化:帮助进行本地化的程序。


1 1 3 java1
1.1.3 Java技术可以做什么

(6) 安全:包括低层和高层安全性,如电子签名、 公共密钥和私有密钥管理、访问控制和证书。

(7) 软件组件:称为Java Beans的组件可以插入现有的组件体系结构。

(8) 对象串行化:通过远程方法调用(Remote Method Invocation, RMI)支持轻型的持久性和通信。

(9) Java数据库连接(JDBC):提供对各种关系数据库的统一访问。



1 2 java
1.2 Java开发工具包的安装与配置

为了鼓励使用Java语言开发软件,Sun Microsystems公司提供了免费的软件开发工具包(SDK),其中包括编译器、虚拟机、调试器等开发工具,称为Java开发工具包或JDK。Windows版和Solaris版的JDK可以从如下站点下载:

http://www.sun.com/products/jdk/1.2/index.html


1 2 java1
1.2 Java开发工具包的安装与配置

安装:执行安装程序,按提示即可。


1 2 java2
1.2 Java开发工具包的安装与配置

路径配置:加入路径C:\jdk1.3\bin

SET PATH=%PATH; C:\jdk1.3\bin

环境变量:

SET CLASSPATH=%CLASSPATH;.;C:\JDK1.3\Lib


1 3 java
1.3Java程序的建立、编译与运行

• 创建第一个应用程序:程序HelloWorldApp将显示一句问候语“HelloWorld!”。

• 创建第一个小应用程序:程序HelloWorld也将显示一句问候语“HelloWorld!”。


1 3 1
1.3.1创建第一个应用程序

Step1:创建源代码文件;

Step2:将源代码文件编译为字节码文件;

Step3:运行字节码文件


1 3 1 1
1.3.1.1 创建源代码文件

启动“记事本”,输入如下代码:

public class HelloWorldApp {

public static void main(String[] args) {

//Display the string.

System.out.println("Hello World!");

}

}

注意:大小写敏感;文本文件;文件名为<类名>.java


1 3 1 2
1.3.1.2 编译源代码文件

  • 进入DOS或Command提示符状态;

  • 转到Java源程序所在目录,如C:\java

  • 输入如下命令,并回车:

    javac HelloWorldApp.java

    注意:编译成功后将生成字节码文件

    HelloWorldApp.class


1 3 1 3
1.3.1.3 运行程序

在相同目录下输入如下命令,并回车:

java HelloWorldApp


1 3 2
1.3.2 创建第一个小应用程序

Step1:创建源代码文件;

Step2:配套的HTML文件;

Step3:将源代码文件编译为字节码文件;

Step4:运行程序。


1 3 2 1
1.3.2.1 创建源代码文件

启动“记事本”,输入如下代码,并保存为HelloWorld.java

import java.applet.Applet;

import java.awt.Graphics;

public class HelloWorld extends Applet {

public void paint(Graphics g) {

g.drawString("Hello world!", 50, 25);

}

}


1 3 2 2 html
1.3.2.2 创建相应的HTML文件

在“记事本”,输入如下代码,并保存为Hello.html

<HTML>

<HEAD>

<TITLE> A Simple Program </TITLE>

</HEAD>

<BODY>

Here is the output of my program:

<APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25>

</APPLET>

</BODY>

</HTML>


1 3 2 3
1.3.2.3 编译源代码文件

  • 进入DOS或Command提示符状态;

  • 转到Java源程序所在目录,如C:\java

  • 输入如下命令,并回车:

    javac HelloWorld.java

    注意:编译成功后将生成字节码文件

    HelloWorld.class


1 3 2 4
1.3.2.4 运行程序

输入如下命令,并回车:

appletviewer Hello.html


1 4 helloworld
1.4 程序HelloWorld的分析

既然我们已经编译并运行了第一个Java程序,我们自然想知道它的工作原理。本节我们首先分析HelloWorldApp应用程序,然后再分析HelloWorld小应用程序。


1 4 1
1.4.1 对应用程序的分析

• 注释:

/* 文本 */

/** 文本 */


1 4 11
1.4.1 对应用程序的分析(续)

• 定义类:

类是面向对象语言的基本构件。类是一个“蓝图”,描述此的实例(instance)相关联的状态和行为。当你实例化(instantiate)一个类时,就是创建一个对象,它的状态和行为与此类的其它实例相同。状态由成员变量表示;行为则由方法表示。


1 4 12
1.4.1 对应用程序的分析(续)

• main方法:

每个Java应用程序的入口点都是它的main方法。当运行Java应用程序时,指定要运行的类的名称,Java解释器调用该类中定义的main方法,由main方法控制程序的流程、分配所需资源并运行为此应用程序提供功能的其它方法。


1 4 13
1.4.1 对应用程序的分析(续)

每个Java应用程序必须声明一个mian方法:

public static void main(String[] args)

修饰符:

public:允许任何类调用main方法;

static:表示main方法与HelloWorldApp类相关联,

而不是在这个类的一个实例上进行操作。

void: 表示main方法不返回任何值。

String:命令行参数。


1 4 14
1.4.1 对应用程序的分析(续)

• 使用类和对象

该程序使用了System类。 System类提供的功能之一是标准输出流。System.out是System类中的out变量的完整名称。应用程序没有实例化System类,而是通过System类直接访问out,这是因为out是类变量,与类相关联,而不与对象相关联。类变量out引用PrintStream类的一个实例。当System类被载入时,它实例化PrintStream类,并为类变量out分配一个新的PrintStream对象,再调用其实例方法:System.out.println(“Hello World!”)


1 4 2
1.4.2 对小应用程序的分析

•导入类和包

两条import语句分别导入Applet和Graphics类,从而可以引用其它包中的类。如果删除这两行,则须修改程序如下:

public class HelloWorld extends java.applet.Applet {

public void paint(java.awt.Graphics g) {

g.drawString("Hello world!", 50, 25);

}

}


1 4 21
1.4.2 对小应用程序的分析

•定义Applet子类

public class HelloWorld extends Applet

关键字extends表示HelloWorld类是Applet类的一个子类。每个小应用程序applet都必须是Applet类的一个子类,从而继承Applet类的功能,从与浏览器通信到GUI。


1 4 22
1.4.2 对小应用程序的分析

•实现applet的方法

HelloWorld applet只实现了一个方法paint。

与应用程序不同,applet不需要main方法。

Applet应包含在HTML页面中。


1 4 23
1.4.2 对小应用程序的分析

•运行applet的方法

当支持Java的浏览器遇到<APPLET>标记时,为applet保留屏幕显示空间,将Applet子类装载进它所在的计算机,然后创建Applet子类的一个实例。


Java
1.5 常见错误

  • 编译时错误

    路径设置错、文字输入错

  • 运行时错误

    源文件名与public类名不一致

    类的数量

    源文件格式


Java
第二章 基本概念

  • 2.1 注释与程序段

    注释 // /* */

    分号 ;

    程序段 { }

    空白


Java
第二章 基本概念(续)

  • 2.2 标识符

    字母、下划线或$开头的字母、数字、下划线和$构成的字符串。

  • 2.3 Java语言的关键字

    保留字


2 4 java
2.4 Java基本数据类型

  • 分四大类:逻辑、字符、整数和浮点

    共9种基本数据类型

    逻辑类型:boolean

    字符类型:char和string

    整数类型:byte,short,int和long

    浮点类型:float和double


2 6 java
2.6 Java 编程习惯

  • 程序可读性

    类、接口:通常使用名词,且每个单词的

    首字母要大写

    方法:可以是动词,首字母小写,其后用大写

    字母分隔每个单词

    常量:全部大写,单词之间用下划线分隔

    变量:同方法,应该避免使用$符号


Java
第二章 基本概念

  • 2.1 注释与程序段

    注释 // /* */

    分号 ;

    程序段 { }

    空白


Java
第二章 基本概念(续)

  • 2.2 标识符

    字母、下划线或$开头的字母、数字、下划线和$构成的字符串。

  • 2.3 Java语言的关键字

    保留字


2 4 java1
2.4 Java基本数据类型

  • 分四大类:逻辑、字符、整数和浮点

    共9种基本数据类型

    逻辑类型:boolean

    字符类型:char和string

    整数类型:byte,short,int和long

    浮点类型:float和double


2 6 java1
2.6 Java 编程习惯

  • 程序可读性

    类、接口:通常使用名词,且每个单词的

    首字母要大写

    方法:可以是动词,首字母小写,其后用大写

    字母分隔每个单词

    常量:全部大写,单词之间用下划线分隔

    变量:同方法,应该避免使用$符号


2 6 java2
2.6 Java 编程习惯(续)

  • 程序可读性

    控制结构:if-then-else和for语句等中的

    语句或语句组要用{}

    间隔:每行一条语句,并且采缩进格式

    注释:尽量多注释


Java
2.7 对象概念用一个下午学习,用一生去掌握

  • 复合数据类型:多个不同类型变量的组合,如structure,record

  • 类:在OOP中将复合数据类型称为类(class)

  • 对象:某个类的实例

  • 成员:构成对象的基本元素

  • 引用:其值为地址者


Java
2.8 变量概述

  • Java“类”定义对象,对象就是数据和处理,或表示这些数据的操作。变量是类中数据的“容器”,也被称为“域”(field)。

  • 变量声明:在使用变量之前,类必须定义变量的类型和名字,即先定义,后使用。

    例如:

    String myOutPut;


Java
2.8 变量概述(续)

  • 变量赋值:<变量名> = <表达式>;

  • 变量作用域:变量起来作用的范围,即在那里存在和在那里不存在。作用域判断:变量只在声明它的代码块中以及该块内所包含的任何块中。在此区域之外该变量既不存也不能被引用。


2 8 eample

import java.applet.Applet;

public class scopeTest extends Applet

{

String myString = "Hello";

public void init()

{

doPrintSomething();

doPrintSomethingElse();

}

public void doPrintSomething()

{

String notPrinted;

notPrinted = "Hi!";

String localString = "World!";

System.out.println(myString + " " + localString);

}

public void doPrintSomethingElse()

{

String localString = "Everybody!";

System.out.println(myString + " " + localString);

}

}

2.8 变量概述-Eample


Java
2.9 方法概要

  • 方法(method):定义类能够执行的动作和如何执行这些动作。

  • 方法分为三类:转换器:接受修改内部变量值的方

    法;

    访问器:获取内部变量值的方法;效果器:执行某个动作的方法。


Java
2.9 方法概要(续)

public void doPrintSomething(String something)

{

System.err.println(foo);

}

调节器

返回类型

名称

参数列表


Java
2.9 方法命名参考

  • 方法名体现其所完成的任务

  • 方法名以小写字母开头,将划分单词界线的字母大写

  • 对转化器,加前缀“set”;对访问器,加前缀“get”;对效果器,加前缀“do”。


Java
第三章 数据类型你和我不是同一种人 委婉的拒绝

  • 物以类聚,人以群分

  • 计算机的世界,即数据的世界,用数据表达信息,不同种类的信息以类型表征。


Java
第三章 数据类型你和我不是同一种人 委婉的拒绝

  • 物以类聚,人以群分

  • 计算机的世界,即数据的世界,用数据表达信息,不同种类的信息以类型表征。


Java
3.1 原始数据类型

类型 含义

Byte 8位整数

Short 16位整数

Int 32位整数

long 64位整数

float 单精度浮点数

double 双精度浮点数

char 16为Unicode字符

boolean 布尔型


Java
数据类型int

举例:

int x;

x = 5;

System.out.println(x);


Java
数据类型int(续)

举例:

int x = 5;

System.out.println(x);

---------------------

x=5+20;

System.out.println(x);

x= x+1;

System.out.println(x);


Float double
数据类型float、double

举例:

float price = (float) 7.25*5;

System.out.println(x);

double val1 = 7.0/9.0;

double val2 = 2.0/9.0;

double val3 = val1+val2;

System.out.println(val1);

System.out.println(val2);

System.out.println(val3);


Java
数学运算符

  • + 加

  • - 减

  • * 乘

  • / 除

  • % 取模(余)


3 2 string
3.2 String

  • 类:对象的描述,正如设计图是住宅的描述一样,你可以按照设计图建造许多住宅,设计图是“类”的定义,而住宅则是设计图的实例化,即按照定义建造出的对象。


String
String构造

String firstName = “George”;

String lastName = new String(“Washington”);

System.out.println(firstName);

System.out.println(lastName);

构造器

Class variableName = new Class();

Class variableName = new Class(parameters);


String1
String构造

String firstName = “George”;

String lastName = new String(“Washington”);

System.out.println(firstName);

System.out.println(lastName);

构造器

Class variableName = new Class();

Class variableName = new Class(parameters);


String2
String合并

String firstName = “George”;

String lastName = new String(“Washington”);

String fullName = firstName + lastName;

System.out.println(fullName);

String fullName = firstName + “” + lastName;

System.out.println(fullName);


String length
String方法----Length()

String title = “Java 2 Programming”;

int len = title.Length();

System.out.println(len);

注意:字符串长度为其中所含字符的个数,包括

空格。


String indexof
String方法----IndexOf()

String title = “Java 2 Programming”;

int index= title. indexOf(“2”);

System.out.println(index);

5

注意:字符串索引自左到右,从0开始编号。


String substring
String方法----Substring()

String title = “Java 2 Programming”;

int firstHalf= title. substring(0,7);

int lastHalf= title. substring(7);

System.out.println(firstHalf);

System.out.println(lastHalf);


String3
String方法小结

public int length()

public int indexOf(String findme)

public String substring(int startIndex)

public String substring(int srartIndex,

int srartIndex+subLength)


Java
3.3 数 组

  • 数组:相似元素的有序集合

    同一数组中的元素必须类型相同,如int数组、double数组、String数组和char数组等。


Java
数组定义

举例

int firstArray[];

int secondArray[] = new int[10];

int thirdArray[] = {10,12,-10,100};

firstArray为整型空(null)数组,secondArray为10个元素整型数组,thirdArray有4个int值(分别为10,12,-10,100)的数组


Java
数组访问

数组访问方法:<数组名>[index]

数组元素索引:从0开始递增

例如:

System.out.println(thirdArray[0]);

System.out.println(thirdArray[1]);

thirdArray[2]=168; //数组元素赋值

System.out.println(thirdArray[2]);


Length
数组长度 length域

  • 数组中的元素个数称为数组长度,所有数组均有一个length域记录数组长度。

  • 举例

    Char letters[] = {‘a’,’b’,’c’};

    System.out.println(letters.length);

    3

    System.out.println(letters);//作为字符串输出


Java
数组使用举例

String names[]={“John”, “Mary”, “Robert”};

String people[];

people = names;

System.out.println(names[0]);

System.out.println(people[2]);

System.out.println(names);//无效


Java
3.4 向量

  • 向量:对象的集合。

    其中,各元素可以不必同类型,元素可以增加和删除,不能直接加入原始数据类型


Java
向量使用

首先必须在程序开始处加入:

import java.util.Vector;

==================

Vector v = new Vector();

String s = new String(“Hello”);


Java
向量使用(续)

v.add(s);

v.add(“Goodbye”);

System.out.println(v);

System.out.println(v.size());

[Hello, Goodbye]

2


Java
向量使用(续2)

boolean success = v.remove(s);//v.remove(“Hello”)

System.out.println(v);

System.out.println(success);

System.out.println(v.size());

[Goodbye]

True

1


Vector
Vector方法

public boolean add(object o)

public boolean remove(object o)

public int size()

public Enumeration element()


Java
在向量中使用封装器

  • 由于Java不把原始数据类型当作对象来处理,向量中就不允许存储原始数据类型的数据,为此,Java又引入如下新的类以封装原始数据类型:

    Integer

    Float

    Double

    Character

    Boolean


Java
在向量中使用封装器(续)

举例

Integer I = new Integer(211);

Int i = I.intValue();

System.out.println(i);


Java
封装器类小结

Integer new Integer(int i) intValue()

Float new Float(float f) floatValue()

Double new Double(double d) doubleValue()

Character new Character(char c) charValue()

Boolean new Boolean(boolean b) booleanValue()


Java
封装器使用举例

String name = new String(“John Smith”);

Integer age = new Integer(30);

Double salary = new Double(8675.88);

Vector record = new Vector();

record.add(name); record.add(age);

record.add(salary);System.out.println(record);


Java
枚举

Enumeration(枚举)类允许列举向量元素,

通过elements()方法得到Enumeration对象。

public boolean hasMoreElements()

public Object nextElement()


Java
枚举举例

import java.util.*;

Vector dogs = new Vector();

dogs.add(“Rambo”);dogs.add(“Feisy”);

Enumeration names = dogs.elements();

System.out.println(names.hasMoreElements());

System.out.println(names. nextElement());

System.out.println(names.hasMoreElements());

System.out.println(names. nextElement());

System.out.println(names.hasMoreElements());


Java
枚举举例(续)

显示结果

true

Rambo

true

Feisy

false


Java
枚举举例(续2)

public class ThreeStoogesExample

{

public static void main(String args[])

{

// ThreeStoogesExample

Vector stooges = new Vector();

stooges.add("Larry"); stooges.add("Curly");

stooges.add("Moe");


Java
枚举举例(续3)

stooges.remove("Curly"); stooges.add("Shemp");

System.out.println("The " + stooges.size()+ "Stooges");

Vector actors = new Vector();

actors.add("Bob"); actors.add("Ted");

actors.add("Alice"); actors.add(stooges);

System.out.println(actors.size());

System.out.println(actors);}}


Java
枚举举例(续4)

The 3Stooges

4

[Bob, Ted, Alice, [Larry, Moe, Shemp]]


Nextelement
nextElement()返回类型

  • nextElement()返回类型是Object类

  • 如需将该值赋给变量,必须强制类型转换

    String name = (String) names.nextElement();


Java
补充实例1

public class IsLowerCaseExample {

public static void main(String args[]) {

// IsLowerCaseExample

char letter= 'f';

boolean lowerCase = Character.isLowerCase(letter);

System.out.println("Is letter lower case? " + lowerCase);

letter = ' F';

boolean upperCase = Character.isUpperCase(letter);

System.out.println("Is letter upper case? " + upperCase);

}

}


Java
补充实例2

public class UseSubString

{

public static void main(String args[])

{

// UseSubString

String source= "abcdefghijklmnop";

String s; int len;

s=source.substring(4,7); len=s.length();

System.out.println(s); System.out.println(len);

}

}


Java
补充实例3

public class UseTheForceExample{

public static void main(String args[]){

// UseTheForceExample

String force = "Use the force, Luke!";

String findString = "Luke";

int findStringLength = findString.length();

int startIndex = force.indexOf(findString);

int endIndex = startIndex + findStringLength;

String subStr = force.substring(startIndex, endIndex);

System.out.println(startIndex); System.out.println(endIndex);

System.out.println(findStringLength);

System.out.println("Substring is " + subStr);}}


Java
第四章 流程控制

生活中充满着选择、充满着决定,

流程控制就是Java语言用于选择和决定的机制。


Java
4.1 布尔检验

目的:如何比较两个对象

相等比较

格式:A == B

说明:如A等于B,表达式A==B的值为true;

否则为false。


Java
4.1 布尔检验(续)

举例

System.out.println(“The expression 2==4 is ”);

System.out.println(2==4);

显示结果:

The expression 2==4 is

false


4 1 2
4.1 布尔检验(续2)

Equals()方法

对于String、Integer和Float的对象类型,用Equals()方法判断是否相等。

Integer I1=new Integer(2);

Integer I2=new Integer(2);

System.out.println(“Does I1 equals I2?”);

System.out.println(I1.Equals(I2));


4 1 3
4.1 布尔检验(续3)

注意:比较两个对象时用Equals()方法,比较原始数据类型时用==运算符。

大于/小于

A>B

A<B

A>=B

A<=B

A!=B


4 2 if then else
4.2 IF-THEN-ELSE

If-Then语句:

if (<条件表达式>)

<语句>;

说明:如果<条件表达式>为真,就执行<语句>;否则,不执行<语句>。


4 2 if then else1
4.2 IF-THEN-ELSE(续)

举例

int temperature = 38;

if (temperature>35)

System.out.println(“It’s too hot!”);

System.out.println(“Have a nice day.”);


4 2 if then else 2
4.2 IF-THEN-ELSE(续2)

举例

int temperature = 38;

if (temperature>35){

System.out.println(“It’s too hot!”);

System.out.println(“I want to go home!”);

}

System.out.println(“Have a nice day.”);


If then else
IF-THEN-ELSE

if (<条件表达式>)

<语句1>;

else

<语句2>;

说明:……


If then else1
IF-THEN-ELSE举例

int temperature = 38;

if (temperature>35){

System.out.println(“It’s too hot!”);

System.out.println(“I want to go home!”);

}

else

{ System.out.println(“Have a nice day.”);

System.out.println(“Let’s stay here.”);

}


Java
If语句的嵌套

If (<条件1>)

{…

if (<条件2>)

<语句2>;

}


Java
If语句的嵌套举例

行李费问题

随身免费携带20kg行李,40kg以内每kg收费1元,40kg以上每kg收费2元。


4 3 while
4.3 while 语句

格式:

while (<条件>)

<语句>;

说明:当<条件>为真时反复执行<语句>,直到<条件>为假时为止。


4 3 while1
4.3 while 语句举例

int x=0;

While (x<5) {

System.out.println(x);

x=x+1;

}


4 3 while2
4.3 while 语句举例(续)

int x=0,s=0;

While (x<5) {

System.out.println(x);

x=x+1;

s=s+x;

}

System.out.println(s);


4 3 while 2
4.3 while 语句举例(续2)

String s=“x”;

while (x.length()<4)

System.out.println(s+”is too short.”);

s=s+ “x”;

}

System.out.println(“All done!”);


4 3 while 3
4.3 while 语句举例(续3)

int x =100;

int y=0;

while (x>0){

y++;

x=x-10;

}

System.out.println("x="+x);

System.out.println("y="+y);


4 4 for
4.4 for循环

格式:

for (<初始化表达式>;<条件表达式>;<修改表达式>)

<语句>;


4 4 for1
4.4 for循环举例

S=0;

for (int i =1; i<5; i++){s=s+i;

System.out.println(“i=”+i);

}

System.ou.println(“s=”+s);


4 4 for2
4.4 for循环举例(续)

String colors[] = {"red", "yellow", "blue", "purple"};

for (int i = 0; i < colors.length; i++) {

System.out.println(colors[i]);

}


4 4 for 2
4.4 for循环举例(续2)

String colors[] = {"red", "yellow", "blue", "purple"};

for (int i = 0; i < colors.length; i++) {

if (colors[i].equals("blue")){

System.out.println("name = " + colors[i]);

System.out.println("index = " + i);

}

}


4 4 for 3
4.4 for循环举例(续3)

int maximum=10;

for(int i=0; i<=maximum;i++){

int square = i*i;

System.out.println(i+" square is "+square);

}


4 5 switch
4.5 switch 语句

int choice = 1;

switch (choice) {

case 0: System.out.println("Zero"); break; case 1: System.out.println("One"); break; case 2: System.out.println("Two"); break; default: System.out.println("Unknown");

}


4 5 switch1
4.5 switch 语句举例

char choice = 'c';

switch (choice) {

case 'a':

System.out.println("alpha"); break;

case 'b':

System.out.println("beta"); break;

case 'c':

System.out.println("charlie"); break;

default:

System.out.println("Unknown");

}


4 5 switch2
4.5 switch 语句举例(续)

int x = 2; switch (x) {

case 0:

case 2:

case 4: System.out.println("small");

case 6:

case 8: System.out.println("even"); break;

default:

System.out.println("odd");

}


4 5 switch 2
4.5 switch 语句举例(续2)

char grade;

String rating;

grade = 'B';

switch (grade) {

case 'A': rating = "Excellent"; break;

case 'B': rating = "Good"; break;

case 'C': rating = "Average"; break;

case 'D': rating = "Poor"; break;

case 'F': rating = "Failure"; break;

default: rating = "Confused";

}

System.out.println("Grade is " + grade);

System.out.println("Rating is " + rating); }


Java
二重循环例

public class testArray

{

public static void main(String args[])

{

int x[][] = new int [2][3];

int i,j;

for (i=0;i<2;i++)

for (j=0;j<3;j++) x[i][j]=i+j;

for (i=0;i<2;i++) {

System.out.println();

for (j=0;j<3;j++)

System.out.print(x[i][j]);

}

}

}


Java
二重循环例(续1)

public class Findmax

{

public static void main(String args[])

{

int a[][]={{8,4,2,1},{9,0,7,5},{-10,12,-5,3}};

int i,j,row=0,col=0,max;

max=a[0][0];

for (i=0;i<3;i++){

for (j=0;j<4;j++)

if (a[i][j]>max){max=a[i][j];row=i;col=j;}

}

System.out.println("max="+max);

}

}


Java
二重循环例(续2)

public class sortbubble

{

public static void main(String args[])

{

// sortbubble

int a[]={8,4,2,9,0,7,5,3,6,1};

int i,j,k,t;

for (i=9;i>0;i--)

for(j=0;j<i;j++)

if (a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}

for (i=0;i<10;i++)

System.out.println(a[i]);

}

}


Java
二重循环例(续3)

public class sortbubble2

{

public static void main(String args[])

{

// sortbubble

int a[]={8,4,2,9,0,7,5,3,6,1};

int i,j,k,t;

for (i=0;i<=9;i++)

for(j=9;j>i;j--)

if (a[j]<a[j-1]) {t=a[j];a[j]=a[j-1];a[j-1]=t;}

for (i=0;i<10;i++)

System.out.println(a[i]);

}

}


Java
二重循环例(续4)

  • public class sortbubble3

  • {

  • public static void main(String args[])

  • {

  • // sortinsert

  • int a[]={8,4,2,9,0,7,5,3,6,1};

  • int i,j,k,t;

  • for (i=9;i>0;i--)

  • for(j=0;j<i;j++)

  • if (a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}

  • for (i=0;i<10;i++)

  • System.out.println(a[i]);

  • }

  • }


Java
二重循环例(续5)

public class sortselect

{

public static void main(String args[])

{

int a[]={8,4,2,9,0,7,5,3,2,1};

int i,j,k,t, len=a.length;

for (i=0;i<len-1;i++){

k=i;

for (j=i+1;j<len;j++) if (a[j]<a[k]) k=j;

t=a[k];a[k]=a[i];a[i]=t;

}

for (i=0;i<10;i++) System.out.println(a[i]);

}

}


Java
二重循环例(续6)

public class sortinsert

{

public static void main(String args[])

{

int a[]={8,4,2,9,0,7,5,3,6,1};

int i,j,t;

for (i=1;i<10;i++){

t=a[i];

for (j=i-1;j>=0;j--) if (a[j]<=t) break; else a[j+1]=a[j];

a[j+1]=t;

}

for (i=0;i<10;i++) System.out.println(a[i]);

}

}


Arrays sort
排序方法Arrays.sort()

import java.util.*;

class sortmethod {

public static void main(String arguments[]){

int numbers[]={9,2,7,5,3,6,4,0,1,8};

System.out.println("The original order:");

for (int i = 0;i<numbers.length;i++)

System.out.println(i+":"+numbers[i]);

Arrays.sort(numbers);

System.out.println("The new order:");

for (int i = 0;i<numbers.length;i++)

System.out.println(i+":"+numbers[i]);

}

}


Arrays sort1
排序方法Arrays.sort(续)

import java.util.*;

class Name {

public static void main(String arguments[]){

String names[]={"Akbar","Umberto","Percival","Zemo","Diego"};

System.out.println("The original order:");

for (int i = 0;i<names.length;i++)

System.out.println(i+":"+names[i]);

Arrays.sort(names);

System.out.println("The new order:");

for (int i = 0;i<names.length;i++)

System.out.println(i+":"+names[i]);

}

}


5 to be or not to be is a problem shakespeare
5章 布尔逻辑To be or not to be is a problem. ————Shakespeare

布尔运算:

  • AND运算符——Java表示:&&规则:当X和Y均为真时,X&&Y才为真

  • OR 运算符——Java表示:||规则:当X或Y为真时,X || Y就为真

  • NOT 运算符——Java表示:!规则:!X取X的“相反值”


Java
布尔逻辑举例

int temperature = 36,humidity=95;

if ((temperature>35) && (humidity >90))

{

System.out.println(“It’s not just hot,it’s humid”);

}


Java
布尔逻辑举例(续)

if ((miles>3000) && (month > 3))

{

System.out.println(“Your car warranty has expired!”);

}


Java
布尔逻辑举例(续2)

if ((miles>3000) || (month > 3))

{

System.out.println(“Your car warranty has expired!”);

}


Java
布尔逻辑举例(续3)

string password;

//Later

If(!password.equals(“open sesame”))

{

System.out.println(“Sorry,incorrect password”);

}


Java
布尔逻辑举例(续4)

String days[] ={"Sunday", "Monday", "Tuesday",

"Wednesday", "Thursday", "Friday", "Saturday"};

String today; // The day of the week. e.g. "Monday"

int timeHour;

boolean isSaturday = today.equals("Saturday");

boolean isSunday = today.equals("Sunday");

boolean afterTen = timeHour >= 10;

boolean beforeFour = timeHour < 16;

if ((isSaturday || isSunday) && (afterTen && beforeFour))

System.out.println("Mow the lawn.");

else

System.out.println("Do not mow the lawn!");


Java
布尔逻辑举例(续4)

int x=0,y=10;

While ((x<5)&&(y>5)){

System.out.println(“x=”+x);

System.out.println(“y=”+y);

x++;

y=y-5;

}


Java
布尔逻辑举例(续5)

int x=0,y=10;

While ((x<5)||(y>5)){

System.out.println(“x=”+x);

System.out.println(“y=”+y);

x++;

y=y-5;

}


Java
布尔逻辑举例(续6)

int x=0,y=10;

While (!(x<5)||!(y>5)){

System.out.println(“x=”+x);

System.out.println(“y=”+y);

x++;

y=y-5;

}


Java
5.2 布尔表达式

  • 优先级:!、&&、||

  • 从左到右

  • 括号改变优先级


Java
布尔表达式例

boolean b1, b2, b3;

b1 = true; // Change as needed.

b2 = true; // Change as needed.

b3 = true; // Change as needed.

if (b1 && (b2 || b3))

System.out.println("Yes");

else

System.out.println("No");


Java
布尔表达式例(续)

boolean isAthlete;

int SAT,int familyIncome;

isAthlete = true; // Change as needed.

SAT = 1200; // Change as needed.

familyIncome = 100000; // Change as needed.

if (isAthlete || (SAT > 1400) || (familyIncome < 30000)){

System.out.println("Scholarship");

}


Java
第六章 图形用户界面GUI如果不和人打交道,计算机的效率会更高

GUI基础

Java GUI由部件(component)和容器(container)组成

部件:与用户交互的项,如按钮、滚动条

和文本输入域。

容器:用于装载部件,如程序的启动封面、顶层窗口、弹出对话框。


Java
简单GUI例

程序见SimpleGUI.java


Simplegui
构造SimpleGUI的步骤

  • 构建一个顶层容器(JFrame);

  • 构建一个部件(JLabel);

  • 用容器的add方法将部件加入该容器;

  • 设置顶层容器大小;

  • 显示顶层容器。


Java
6.2 标签的使用

  • Swing的标签类JLabel

  • public JLabel(String text)

  • public JLabel(String text,int horizontalAlignment)

  • horizontalAlignment的取值SwingConstants.LEFT (缺省值) SwingConstants.CENTERSwingConstants.RIGHT


Java
6.2 标签的使用(续)

  • 水平对齐方式修改方法public void setHorizontalAlignment(int alignment)

  • 垂直对齐方式修改方法public void setVerticalAlignment(int alignment)

  • 垂直对齐方式取值SwingConstants.TOPSwingConstants.CENTER(缺省值)SwingConstants.BOTTOM


Java
6.2 标签的使用例

Jlabel rightLabel = new Jlabel(“I lean to the right”);

rightLabel.setHorizontalAlignment(SwingConstants.RIGHT);

rightLabel.setVerticalAlignment(SwingConstants.TOP);


6 3 gui
6.3 按钮的使用没有按钮的GUI就像没有鲜花的春天

  • Javax.swing.AbstractButton为标准按钮类型定义基本功能,所有按钮都能显示文本、图标。

  • JButtonJButton okButton = new JButton(“ok”);JPanel panel = new Jpanel(); panel.add(okButton);


Checkbox radiobutton
开关按钮—复选框checkbox、单选钮radiobutton

(1) Jcheck(String text,boolean selected)

其中,text表示复选框右边显示的文字, selected表示该复选框是否默认为被选择,如果缺省selected,表示默认为不被选择。

(2) JRadioButton(String text,boolean selected)


Java
按钮使用举例

参见程序ButtonApplet.java

参见程序ButtonsApplet.java


Buttonapplet
ButtonApplet

  • JButton button;

  • JCheckBox checkbox;

  • public void init()

  • {

  • JPanel contentPane = (JPanel)getContentPane();

  • contentPane.setLayout(new FlowLayout());

  • button = new JButton("OK");

  • checkbox = new JCheckBox("Beep when button is pressed", true);

  • contentPane.add(checkbox);

  • contentPane.add(button);


Button s applet
ButtonsApplet

  • JButton button;

  • ButtonGroup group;

  • JRadioButton greenButton, blueButton, redButton;

  • public void init()

  • {

  • JPanel contentPane = (JPanel)getContentPane();

  • contentPane.setLayout(new FlowLayout());

  • button = new JButton("OK");

  • greenButton = new JRadioButton("Green");

  • blueButton = new JRadioButton("Blue");

  • redButton = new JRadioButton("Red");

  • contentPane.add(greenButton);

  • contentPane.add(blueButton);

  • contentPane.add(redButton);

  • contentPane.add(button); }


Java
6.4 文本部件的使用

在GUI设计中,按钮和标签提供了极大的灵活性,但是很多时候GUI必须请求用户输入文字、密码、登录标识符、URL等。本节介绍几个最常见的文本输入部件。


6 5 1
6.5.1 文本域部件

  • JTextField和JPasswordField

  • 构造器JTextField(int colums) JTextField(String text) JTextField(String text,int colums)

  • 方法setText(String text) getText()


6 5 11
6.5.1 文本域部件(续)

  • 方法setHorizontalAlignment(int alignment) setVerticalAlignment(int alignment)

  • 举例

    程序TextApplet.java

    TextFieldApplet.java


Textapplet java
TextApplet.java

import javax.swing.*;

import java.awt.*;

public class TextApplet extends JApplet

{

JPanel contentPanel;

JLabel label;

JTextField textField;

public void init()

{

contentPanel = (JPanel)getContentPane();

contentPanel.setLayout(new FlowLayout());

label = new JLabel("Input text here: ");

textField = new JTextField("A default value", 20);

contentPanel.add(label);

contentPanel.add(textField);

}

}


Textfieldapplet java
TextFieldApplet.java

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class TextFieldApplet extends JApplet

{

JPanel contentPanel;

JLabel label;

JTextField textField;

JButton button;

public void init()

{

contentPanel = (JPanel)getContentPane();

contentPanel.setLayout(new FlowLayout());

label = new JLabel("Input text here: ");

textField = new JTextField("A default value", 20);

button = new JButton("OK");


Textfieldapplet java1
TextFieldApplet.java

// You know the drill-- action handling will

// be covered in a following chapter

button.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

doMyButtonAction();

}

});

contentPanel.add(label);

contentPanel.add(textField);

contentPanel.add(button);

}

public void doMyButtonAction()

{

showStatus(textField.getText());

}

}


Jtextarea
文本区域部件JTextArea

  • JTextArea构造器JTextArea(int rows,int colums) JTextArea(String text) JTextArea(String text, int rows,int colums)

  • textArea.setLineWrap(boolean wrap)

  • textArea.setWrapStyleWord(boolean word)


Jtextarea1
JTextArea举例

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class TextAreaApplet extends JApplet

{

JPanel contentPanel;

JTextArea textArea;

JButton button;

public void init()

{

contentPanel = (JPanel)getContentPane();

contentPanel.setLayout(new FlowLayout());

textArea = new JTextArea("A default value", 20, 40);

textArea.setLineWrap(true); button = new JButton("Clear");


Jtextarea2
JTextArea举例(续)

// You know the drill-- action handling will // be covered in a following chapter button.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

doMyButtonAction();

}

});

contentPanel.add(textArea);

contentPanel.add(button); }

public void doMyButtonAction()

{

// does nothing

}

}


Java
第七章 布局管理器

Java中的容器如Panel、Frame、Applet,每个容器都有与之相关的“布局管理器”。布局管理器是与容器一起工作的一个对象,负责“管理”容器中内容的“布局”,布局管理器能够控制每个部件的大小(size)、形状(shape)和位置(position)。

在Java中,“布局”与“容器”相分离。


Java
7.1 边框布局

网格布局(GridLayout) 将所有部件放置在一个网格中,所有东西均沿着整齐的行、列布局,每个部件大小相同。如果改变窗口大小,每个部件的大小都会相应改变,但仍然保持相同大小。

public BorderLayout()

public Component add(Component comp,

Object constarint)


7 1 1 1
7.1.1 边框布局例1

import java.awt.*;

  • import javax.swing.*;

  • import java.applet.Applet;

  • public class Fig7_1

  • extends Applet

  • {

  • public void init()

  • {

  • setLayout(new BorderLayout());

  • add(new JButton("North"), BorderLayout.NORTH);

  • add(new JButton("South"), BorderLayout.SOUTH);

  • add(new JButton("East"), BorderLayout.EAST);

  • add(new JButton("West"), BorderLayout.WEST);

  • add(new JButton("Center"), BorderLayout.CENTER);

  • resize(250, 150);

  • }

  • }


7 1 1 11
7.1.1 边框布局例1之结果


7 1 2 2
7.1.2 边框布局例2

  • import java.awt.*;

  • import javax.swing.*;

  • import java.applet.Applet;

  • public class Fig7_2

  • extends Applet

  • {

  • public void init()

  • {

  • setLayout(new BorderLayout());

  • add(new JButton("North"), BorderLayout.NORTH);

  • // add(new JButton("South"), BorderLayout.SOUTH);

  • // add(new JButton("East"), BorderLayout.EAST);

  • add(new JButton("West"), BorderLayout.WEST);

  • add(new JButton("Center"), BorderLayout.CENTER);

  • resize(250, 150);

  • }

  • }


7 1 2 21
7.1.2 边框布局例2之结果


7 1 3 3
7.1.3 边框布局例3

  • import java.awt.*;

  • import javax.swing.*;

  • import java.applet.Applet;

  • public class Fig7_3

  • extends Applet

  • {

  • public void init()

  • {

  • setLayout(new BorderLayout());

  • JLabel title = new JLabel("You are at the Border!", JLabel.CENTER);

  • add(title, BorderLayout.NORTH);

  • JLabel label = new JLabel("Passport #", JLabel.RIGHT);

  • add(label, BorderLayout.WEST);

  • JTextField text = new JTextField("1234567890");

  • add(text, BorderLayout.CENTER);

  • resize(250, 50);

  • }

  • }


7 1 3 31
7.1.3 边框布局例3之结果


Java
7.1 网格布局

网格布局(GridLayout) 将所有部件放置在一个网格中,所有东西均沿着整齐的行、列布局,每个部件大小相同。如果改变窗口大小,每个部件的大小都会相应改变,但仍然保持相同大小。

public GridLayout(int rows, int cols)

public GridLayout(int rows, int cols,

int hgap,int vgap)

public Component add(Component comp)


7 2 1
7.2 网格布局例1

  • import java.applet.Applet;

  • import java.awt.*;

  • import javax.swing.*;

  • public class Fig7_5 extends Applet {

  • /**

  • * Initializes the applet. You never need to call this directly; it is

  • * called automatically by the system once the applet is created.

  • */

  • public void init() {

  • String labels[] = {"One", "Two", "Three", "Four", "Five",

  • "Six", "Seven", "Eight", "Nine"};

  • setLayout(new GridLayout(3, 3));

  • for (int i=0; i<labels.length; i++)

  • add(new JButton(labels[i]));

  • resize(240, 180);

  • }


7 2 11
7.2 网格布局例1之结果


7 2 2
7.2 网格布局例2

public class Fig7_6 extends Applet {

/**

* Initializes the applet. You never need to call this directly; it is

* called automatically by the system once the applet is created.

*/

public void init() {

String labels[] = {"One", "Two", "Three", "Four", "Five",

"Six", "Seven", "Eight", "Nine"};

setLayout(new GridLayout(3, 3, 10, 10)); /*部件之间加了间隙 */

for (int i=0; i<labels.length; i++)

add(new JButton(labels[i]));

resize(240, 180);

}


7 2 21
7.2 网格布局例2之结果


7 2 3
7.2 网格布局例3

import java.awt.*;

public class Fig7_8

{

/**

* Constructor.

*/

public Fig7_8 () {

}

public static void main(String args[])

{

JFrame f = new JFrame("Exercise 7.2.1 c"); Container c = f.getContentPane();

c.setLayout(new GridLayout(4, 4, 5, 5));

for (int i=0; i<10; i++)

{

Integer I = new Integer(i); c.add(new JButton(I.toString()));

}

f.pack(); f.show();

}

}


7 2 31
7.2 网格布局例3之结果


7 2 32
7.2 网格布局例3之结果

在这种4X4网格布局中,如果只在该容器中加入10内容,就会出现以上未能填满4X4网格布局的结果。

信条:永远填满布局!

如果必须有一个“空白”单元格,可以加入一个空标签以填满,如:

add(new Label(“”))


Java
7.3 组合布局管理器

在Java中,可用的布局管理器有几十种,但没有一种是“完美的”。Java提供了能将各种布局管理器组合在一起的能力。

在Java中,容器可以包含其他容器,每个容器可以有不同的布局管理器。

GUI布局有时比编程更需要创造力。


7 3 1
7.3.1 将容器置于容器之中

两个容器:Applet、Jpanel

两个布局管理器:边框布局、网格布局

Applet是边框布局

Jpanel是网格布局

Jpanel置于Applet之中


7 3 11
7.3.1 组合布局例


7 3 12
7.3.1 组合布局例

setLayout(new BorderLayout());

JPanel panel = new JPanel();

String message = "Drive C: is not responding";

add(new TextArea(message), BorderLayout.CENTER);

panel.setLayout(new GridLayout(1, 3, 10, 5));

panel.add(new JButton("Abort"));

panel.add(new JButton("Retry"));

panel.add(new JButton("Fail"));

add(panel, BorderLayout.SOUTH);

resize(250, 100);


7 3 13
7.3.1 组合布局例

setLayout(new BorderLayout());

JPanel panel = new JPanel();

String message = "Drive C: is not responding";

add(new TextArea(message), BorderLayout.CENTER);

panel.setLayout(new GridLayout(1, 3, 10, 5));

panel.add(new JButton("Abort"));

panel.add(new JButton("Retry"));

panel.add(new JButton("Fail"));

add(panel, BorderLayout.SOUTH);

resize(250, 100);


7 3 2
7.3.2 组合布局例(续)


Java

import java.awt.*;

import javax.swing.*;

public class Fig7_10

extends Panel

{

/**

* Constructor.

*/

public Fig7_10 () {

super();

setLayout(new BorderLayout());

// Create new panels

Panel top = new Panel();

Panel middle = new Panel();

Panel bottom = new Panel();

// Set layouts of panels

top.setLayout(new BorderLayout());

middle.setLayout(new GridLayout(6, 7));

bottom.setLayout(new GridLayout(1, 3));


Java

// Add calendar components

// Top

top.add(new JButton("Previous Month"), BorderLayout.WEST);

JLabel month = new JLabel("October", JLabel.CENTER);

top.add(month, BorderLayout.CENTER);

top.add(new JButton("Next Month"), BorderLayout.EAST);

add(top, BorderLayout.NORTH);

// Middle

// Add days names

String days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

for (int i=0; i<days.length; i++)

middle.add(new JButton(days[i]));

// Add days

for (int day=1; day<=31; day++)

{

Integer Day = new Integer(day);

middle.add(new JButton(Day.toString()));

}

add(middle, BorderLayout.CENTER);


Java

// Bottom

bottom.add(new JButton("Edit"));

bottom.add(new JButton("Save"));

bottom.add(new JButton("Quit"));

add(bottom, BorderLayout.SOUTH);

}

public static void main(String args[]) {

Frame f = new Frame("Exercise 7.3.1 c");

Fig7_10 figure = new Fig7_10();

f.add(figure, BorderLayout.CENTER);

f.pack();

f.show();

}

}


7 4 gridbaglayout
7.4 GridBagLayout布局管理器

GridBagLayout的工作方式类似于网格布局,有可以放置部件的“网格”,但GridBagLayout中的部件可以填充一个以上的网格单元,网格单元不必大小相同,可以相对另一个部件或用固定点来确定一个部件的位置。


7 4 gridbaglayout1
7.4 GridBagLayout布局管理器


7 4 gridbaglayout2
7.4 GridBagLayout布局管理器例

setLayout(new GridBagLayout());

JButton buttons[] = new JButton[7];

for (int i=0; i<buttons.length; i++)

buttons[i] = new JButton("Button " + i);

GridBagConstraints gbc = new GridBagConstraints();


7 4 gridbaglayout3
7.4 GridBagLayout布局管理器例

// First row.

// Add first row of buttons, all evenly spaced

// and expanded both horizonally and vertically.

gbc.fill = GridBagConstraints.BOTH;

gbc.weightx = 1; //Spread out horizontally

gbc.weighty = 1; // Spread out vertically

add(buttons[0], gbc);

add(buttons[1], gbc);

gbc.gridwidth = GridBagConstraints.REMAINDER;//End row!

add(buttons[2], gbc);


7 4 gridbaglayout4
7.4 GridBagLayout布局管理器例

// Second row

// One double-width button, and one double-height button

gbc.gridwidth = 2; //Double width

add(buttons[3], gbc);

gbc.gridwidth = 1;//Reset to single width

gbc.gridheight = 2;//Double height

add(buttons[4], gbc);


7 4 gridbaglayout5
7.4 GridBagLayout布局管理器

// Third row.

// Two single width buttons and bottom of button4.

gbc.gridx = 0;// Start new row

gbc.gridheight = 1;//Reset to single height

add(buttons[5], gbc);

gbc.gridx = 1;//Place in column 1

add(buttons[6], gbc);


To be continued

To be continued

Thanks for your reading!