Java学习随笔之9:AWT编程

命名空间 import java.awt.*;

1. 创建 frame 窗口

	Frame f = new Frame("Test window");
	f.setBounds (100,100, 300,300);
	f.setVisible(true);

2.创建panel, 并添加元素:

	Panel p = new Panel();
	p.add(new TextField(20));
	p.add(new Button("Click me"));
        f.add(p);

3.ScrollPane   滚动条pane

	ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
	sp.add(new TextField(50));
	sp.add(new Button("Click me"));
        f.add(sp);

 布局管理器

  1. FlowLayout  -- 从左到右排列组件,遇到边界自动换下一行
	f.setLayout(new FlowLayout(FlowLayout.LEFT, 20,10));
        f.pack();     //自动适应屏幕大小

2. BorderLayout  (Frame, Dialog, ScrollPane 默认使用这个 layout)

将容器分为  东 南 西 北 中 五个区域, 添加元素时要指定添加到哪个区域, 如果没有指定,默认添加到 中 区域, 后添加的元素 会 覆盖 先前添加的元素

               f.setLayout(new BorderLayout(30,5));
		f.add(new Button("South") , BorderLayout.SOUTH);
		f.add(new Button("North") , BorderLayout.NORTH);

		Panel p = new Panel();
		p.add(new TextField(20));
		p.add(new Button("Click Me"));
		f.add(p);

		f.add(new Button("EAST") , BorderLayout.EAST);

3. GridLayout 网格布局, 默认从左到右,从上到下,各个组件大小由组件区域决定

			 Panel p1 = new Panel();
			p1.add(new TextField(30));
			f.add(p1, BorderLayout.NORTH);

			Panel p2 = new Panel();
			p2.setLayout(new GridLayout(3,5, 4,4));    //3行5列
			String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};

			for(int i=0; i<name.length; i++)
			{
				p2.add(new Button(name[i]));
			}
			f.add(p2);

4. GridBagLayout 一个组件可以跨越一个或多个网格,并设置各个网格的大小可以不同。

5. 所有组件看成是一叠卡片,每次只有最上面的那个可见

6. BoxLayout 可以垂直或水平方向放组件

基本组件:(引用命名空间 import java.awt.*;)

		Frame f = new Frame("Test window");
		Button ok = new Button("Confirm");
		//定义一个 checkbox Group
		CheckboxGroup cbg = new CheckboxGroup();
		//定义一个单选框(处于 cbg组里面), 初始选中
		Checkbox male = new Checkbox("Man", cbg, true);
		Checkbox female = new Checkbox("Female", cbg, false);

		Checkbox married = new Checkbox("Is married?", false);

		//定义一个 下拉框
		Choice colorChooser = new Choice();
		//定义一个 列表
		List colorList = new List(6, true);
		//定义一个 5行 20列的 多文本
		TextArea ta = new TextArea(5, 20);
		//定义一个 50列的单文本
		TextField name= new TextField(50);

		colorChooser.add("Red");
		colorChooser.add("Yellow");
		colorChooser.add("Blue");

		colorList.add("Red");
		colorList.add("Yellow");
		colorList.add("Blue");

		Panel bottom = new Panel();
		bottom.add(name);
		bottom.add(ok);

		f.add(bottom, BorderLayout.SOUTH);

		Panel checkPanel = new Panel();
		checkPanel.add(colorChooser);
		checkPanel.add(male);
		checkPanel.add(female);
		checkPanel.add(married);

		//创建一个垂直列组件 Box,盛装多文本 (Box 需要引用命名空间:import javax.swing.*;)
		Box topLeft = Box.createVerticalBox();
		topLeft.add(ta);
		topLeft.add(checkPanel);
		//创建一个水平Box
		Box top = Box.createHorizontalBox();
		top.add(topLeft);
		top.add(colorList);

		f.add(top);
		f.pack();
		f.setVisible(true);

效果图:

Dialog

Dialog

Dialog d1=new Dialog(f, "title", true);   //f为父类, “title”为dialog title, true 是模式,true为模式dialog, false 为 非模式dialog

FileDialog 是 Dialog 的一个子类:

		FileDialog d1=new FileDialog(f, "Choose the file", FileDialog.LOAD);
                      FileDialog d2 = new FileDialog(f, "Save the file", FileDialog.SAVE);

		Button b1 = new Button("Open file");
		Button b2 = new Button("Save file");

		b1.addActionListener(e->
			{
			d1.setVisible(true);
			System.out.println(d1.getDirectory() + d1.getFile());
			}
			);
		b2.addActionListener(e->
		{
			d2.setVisible(true);
			System.out.println(d2.getDirectory() + d2.getFile());
		});

		f.add(b1);
		f.add(b2, BorderLayout.SOUTH);

事件处理 (引用命名空间:

import java.awt.event.WindowEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowListener; )

ActionListener     actionPerformed  按钮 文本框 菜单项被单击时出发

AdjustmentListener     adjustmentValueChanged  滑块位置变化时触发

KeyListener             keyPressed  按下某个按键时触发

TextListener            textValueChanged

ItemListener            itemStateChanged

WindowListener      windowActivated, windowClosing (点击 “X‘ 右上角按钮触发)

    class Mylistener extends WindowAdapter    (适配器)
	{
		public void windowClosing(WindowEvent e)
		{
			ta.append("User closed the window! \n");
			System.exit(0);
		}
	}
//f.addWindowListener(new Mylistener());

		//匿名内部类实现
		f.addWindowListener(new WindowAdapter()
			{
			public void windowClosing(WindowEvent e)
				{
				 System.exit(0);
				}
			});

AWT 菜单 MenuBar, Menu, MenuItem, MenuShortcut

		MenuBar mb = new MenuBar();
		Menu file = new Menu("File");
		Menu edit = new Menu("Edit");
		MenuItem newItem = new MenuItem("Create");
		MenuItem saveItem = new MenuItem("Save");
		MenuItem exitItem = new MenuItem("Exit", new MenuShortcut(KeyEvent.VK_X));
		file.add(newItem);
		file.add(saveItem);
		file.add(exitItem);

		CheckboxMenuItem autoWrap = new CheckboxMenuItem("Auto Wrap");
		MenuItem copyItem = new MenuItem("Copy");

		edit.add(autoWrap);
		edit.addSeparator();
		edit.add(copyItem);

                   ActionListener menuListener = e->      //添加监听事件
		{
			String cmd = e.getActionCommand();
			if (cmd.equals("Exit"))
			{
				System.exit(0);
			}
		};
		exitItem.addActionListener(menuListener);

		file.add(edit);

                     mb.add(file);

		//mb.add(edit);

		f.setMenuBar(mb);

效果图:

使用Graphics 类 画图:

drawLine()  绘制线

drawString() 绘制字符串

drawRect()  绘制矩形

drawRoundRect() 绘制圆角矩形

drawOval(); 绘制椭圆

drawPolygon()  绘制多边形

drawArc() 绘制一段圆弧

drawPolyline()  绘制折线

fillRect()填充矩形

fillRoundRect() 填充一个圆角矩形

fillOval(); 填充椭圆

fillPolygon() 填充一个多边形

fillArc() 填充圆弧

drawImage() 绘制位图

 class MyCanvas extends Canvas
 {
	 public void paint(Graphics g)
	 {
		Random rand = new Random();
		if(shape.equals(RECT_SHAPE))
		 {
			g.setColor(new Color(220, 100,80));
			Font font = new Font("Arial", Font.BOLD, 18);
			//g.setColor(Color.red);
			setBackground(new Color(0,255,0));
			g.setFont(font);

			g.drawRect(rand.nextInt(200), rand.nextInt(120), 40,60);

		          g.drawLine(rand.nextInt(200), rand.nextInt(120), 40,60);

			g.drawString("Graphics method", 20,40);

			g.drawRoundRect(50, 20, 30, 50, 25, 18);

			g.drawArc(rand.nextInt(200), rand.nextInt(120), 120, 100, 200, 150);
		 }
		if (shape.equals(OVAL_SHAPE))
		{
			g.setColor(new Color(80,100,120));
			g.fillOval(rand.nextInt(200), rand.nextInt(120), 80,60);
		}
	 }
 }

效果图:

 

时间: 2024-10-10 21:10:44

Java学习随笔之9:AWT编程的相关文章

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8

Java学习随笔 - Java保留字

零.说在前面 之前主要是学C/CPP,由于某些原因,打算从头开始把Java的基础从头过一遍,巩固一下.于是,从今天开始开坑Java学习随笔,会将自己在复习Java过程中的一些心得体会啥的写上来,帮助自己整理知识. 一.synchronized synchronized关键字之前都没见过,于是Google了一下.它的作用是给对象.方法.代码块加锁,使得同时只能有一个线程执行.使用.相当于是互斥的一种关系. 二.transient 一个类在实现了Serializable接口之后,其中有部分数据不想进

(。??)ノ~个人java学习随笔记录

基本认识 1.编程思维 根据这几天的java学习,编写程序最重要的就是要有一个清晰的思路.语法上的错误可以跟随着不断的联系与学习来弥补,清晰的思维却只有自己来前期模仿,后面慢慢摸索形成一套属于自己的思维方式. 2.编程方向 程序编写方面考虑的是完成某个任务需要的东西(对象),也就是达成目标需要用什么来完成.程序主要编写思路也是围绕这些东西来写,而不是围绕完成这个目标的步骤.(这就是所谓的面向对象编程,和C语言最大的区别) 3.编程习惯 随着以后编写的程序的不断扩张,程序会越来越大,需要的对象也会

java学习随笔--- 捣蛋vector

最近比较有时间啦,有时间搞下java,个人觉得学这门语言语法太多啦,不一一去学习啦,心血来潮,挂了个struct2的源代码,一入深似海啊,看得我天花缭乱,从最简单的开始吧 1 public static void main(String[] args) { 2 3 Vector v = new Vector(4); 4 5 //向Vector中添加元素 静态数组+动态扩展 6 //使用add方法直接添加元素 7 v.add("Test0"); 8 v.add("Test1&q

JAVA 学习随笔 : JDK Enhancement Process JEP process

是时候寻找一个学习JAVA的路径了 ---- JDK Enhancement Process Oracle发布了JDK增强提案与路线图进程,目的在于鼓励OpenJDK提交者贡献点子和扩展以改进OpenJDK生态圈. Earlier this year, Oracle published the JDK Enhancement Proposal and roadmap process. The purpose of this is to allow OpenJDK committers to su

java学习随笔(二)

运算符:又叫操作符,是一个用于运算的符号,他作用于一个或多个操作数(参与运算的数据) 运算符按操作数的数量又分为:一元(目)运算符,二元(目)运算符,三元(目)运算符 按运算符的功能分为:算术运算符(用于数学运算),逻辑运算符(用于判断真假),位运算符(用于二进制运算),其他 在多种运算符运算时:优先级越高的运算符,会优先得到执行,优先级相同的运算符,会从左到右依次执行 使用多个运算符的常见场景:赋值运算,数学运算,类型转换和函数调用,逻辑运算,三目运算,其他运算 赋值运算:永远最后运行,数学运

java学习随笔(一)入门篇

java之父叫James Gosling java的吉祥物叫duke也叫JavaBean. 我们通过编写源代码通过编译器将源码转为电脑认识的机器语言从而实现对电脑的命令 代码的执行:需通过编译器將源代码编译成机器语言,因为电脑只会读懂机器语言(高电平1,低电平0)0,1组成 java拥有编译器和解释器两种所以可以实现多平台操作. java的特点有:简单性,纯面向对象,跨平台 JDK:java开发工具包  JRE:Java运行环境  JVM:java虚拟机 java的基本类型有 整形,浮点型,字符

java学习随笔(三)

java源文件的命名规则 通常情况下,java源文件的主文件名是可以任意的.但是如果java程序里定义了一个public类,则该源文件的主文件名必须与该public类的类名相同.由于java程序源文件的的文件名必须与public类的类名相同,所以一个java源文件只能定义一个public类. 通常有如下建议: 一个java源文件只定义一个类,不同的类使用不同的源文件定义. 让java源文件的主文件名与该源文件中定义的public类同名.

Java学习随笔2:Java复合赋值表达式的小问题

问题:i += j只是i = i + j的简写么? 答案:非也!看下面的程序: int i = 5; long j = 8; i += j; // 可以通过编译且结果正确 i = i + j; // 无法通过编译,类型转换问题 其实,Java会将i += j转换为i = (int)(i + j)来执行. 通常,一个E1 op= E2形式的复合赋值表达式,等价于E1 = (T)((E1) + (E2)),T即为E1的类型. ps:Java如何生成一个区间的整数(如100-200)? 答: publ