马士兵 J2SE 第11章 GUI编程 GUI初步和布局管理器

/*	范例名称:Frame 应用举例
 * 	源文件名称:TestFrame.java
 *	要  点:Frame组件的创建及显示设置
 */

import java.awt.*;
public class TestFrame {
	public static void main( String args[]) {
		Frame f = new Frame("My First Test");
		f.setLocation(300, 300);
		f.setSize( 170,100);
		f.setBackground( Color.blue);
		f.setResizable(false);
		f.setVisible( true);
	}
}

关闭:

暂时使用CTRL+C关闭

多重FRAME

package com.zzk.cn;

import java.awt.*;

public class TestMultiFrame {
	public static void main(String args[]) {
		MyFrame f1=new MyFrame(100,100,200,200,Color.BLUE);
		MyFrame f2=new MyFrame(300,100,200,200,Color.YELLOW);
		MyFrame f3=new MyFrame(100,300,200,200,Color.GREEN);
		MyFrame f4=new MyFrame(300,300,200,200,Color.MAGENTA);

	}
}

class MyFrame extends Frame {
	static int id=0;
	MyFrame(int x,int y,int w,int h,Color color) {
		super("MyFrame "+(++id));
		setBackground(color);
		setLayout(null);
		setBounds(x,y,w,h);
		setVisible(true);
	}
}

PANEL应用举例

package com.zzk.cn;
import java.awt.*;

public class TestPanel {
	public static void main(String args[]) {
		Frame f=new Frame("Java Frame with Panel");
		Panel p=new Panel(null);
		f.setLayout(null);
		f.setBounds(300,300,500,500);
		f.setBackground(new Color(0,0,102));

		p.setBounds(50,50,400,400);
		p.setBackground(new Color(204,204,255));
		f.add(p);

		f.setVisible(true);
	}
}

多重PANEL

package com.zzk.cn;

import java.awt.*;

public class TestMultiPanel {
	public static void main(String[] args) {
		new MyFrame2("MyFrameWithPanel",300,300,400,300);
	}
}

class MyFrame2 extends Frame {
	private Panel p1,p2,p3,p4;
	MyFrame2(String s,int x,int y,int w,int h) {
		super(s);
		setLayout(null);

		p1=new Panel(null);
		p2=new Panel(null);
		p3=new Panel(null);
		p4=new Panel(null);

		p1.setBounds(0,0,w/2,h/2);
		p2.setBounds(0,h/2,w/2,h/2);
		p3.setBounds(w/2,0,w/2,h/2);
		p4.setBounds(w/2,h/2,w/2,h/2);

		p1.setBackground(Color.BLUE);
		p2.setBackground(Color.GREEN);
		p3.setBackground(Color.YELLOW);
		p4.setBackground(Color.MAGENTA);

		add(p1);
		add(p2);
		add(p3);
		add(p4);

		setBounds(x,y,w,h);
		setVisible(true);
	}
}

习题:设计一个含有Panel的自定义的Frame类,Panel位于中间

我的代码如下:

package com.zzk.cn;

import java.awt.*;

public class CenterPanel {
	public static void main(String[] args) {
		new MyFrame3("MyFrameWithPanel",300,300,300,300);
	}
}

class MyFrame3 extends Frame {
	private Panel p1;
	MyFrame3(String s,int x,int y,int w,int h) {
		super(s);
		setLayout(null);

		p1=new Panel(null);

		setBounds(x,y,w,h);
		p1.setBounds(x/4,y/4,w/2,h/2);

		p1.setBackground(Color.YELLOW);

		add(p1);

		setBounds(x,y,w,h);
		setBackground(Color.blue);
		setVisible(true);
	}
}

马士兵的代码如下:

package com.zzk.cn;

import java.awt.*;

public class CenterPanelDemo {
	public static void main(String[] args) {
		new MyFrame4(300,300,400,300,Color.BLUE);
	}
}

class MyFrame4 extends Frame {
	private Panel p;

	MyFrame4(int x,int y,int w,int h,Color c) {
		super("FrameWithPanel");
		setLayout(null);

		p=new Panel(null);

		setBounds(x,y,w,h);
		setBackground(c);

		p.setBounds(x/4,y/4,w/2,h/2);
		p.setBackground(Color.YELLOW);

		add(p);

		setBounds(x,y,w,h);
		setBackground(Color.blue);
		setVisible(true);
	}
}

从马士兵代码中学到的:

PANEL提取出属性,方便以后程序的扩展

参数的传递

FlowLayout布局管理器,流水线式布局

package com.zzk.cn;

import java.awt.*;

public class TestFlowLayout {
    public static void main(String[] args) {
    	Frame f=new Frame("Flow Layout");
    	Button button1=new Button("OK");
    	Button button2=new Button("Open");
    	Button button3=new Button("Close");

    	f.setLayout(new FlowLayout());
    	f.add(button1);
    	f.add(button2);
    	f.add(button3);
    	f.setSize(100,100);
    	f.setVisible(true);
    }
}

指定左对齐

package com.zzk.cn;

import java.awt.*;

public class TestFlowLayout {
    public static void main(String[] args) {
    	Frame f=new Frame("Flow Layout");
    	Button button1=new Button("OK");
    	Button button2=new Button("Open");
    	Button button3=new Button("Close");

    	f.setLayout(new FlowLayout(FlowLayout.LEFT));
    	f.add(button1);
    	f.add(button2);
    	f.add(button3);
    	f.setSize(100,100);
    	f.setVisible(true);
    }
}

第二个FLOWLAYOUT程序示例

package com.zzk.cn;

import java.awt.*;

public class TestFlowLayout2 {
    public static void main(String[] args) {
    	Frame f=new Frame("Java Frame");
    	//中间间距20,垂直间距40
    	FlowLayout l=new FlowLayout(FlowLayout.CENTER,20,40);

    	f.setLayout(l);
    	f.setLocation(300,400);
    	f.setSize(300,200);
    	f.setBackground(new Color(204,204,255));
    	for(int i=1;i<=7;i++) {
    		f.add(new Button("BUTTON"));
    	}
    	f.setVisible(true);
    }
}

能在编译间出现的错误,不要出现在运行间

BorderLayout布局管理器

package com.zzk.cn;

import java.awt.*;

public class TestBorderLayout {
    public static void main(String[] args) {
    	Frame f;
    	f=new Frame("Border Layout");
    	Button bn=new Button("BN");
    	Button bs=new Button("BS");
    	Button bw=new Button("BW");
    	Button be=new Button("BE");
    	Button bc=new Button("BC");

    	f.add(bn,BorderLayout.NORTH);
    	f.add(bs,BorderLayout.SOUTH);
    	f.add(bw,BorderLayout.WEST);
    	f.add(be,BorderLayout.EAST);
    	f.add(bc,BorderLayout.CENTER);

    	f.setSize(200,200);
    	f.setVisible(true);
    }
}

GRIDLAYOUT布局管理器

package com.zzk.cn;

import java.awt.*;

public class TestGridLayout {
    public static void main(String[] args) {
    	Frame f=new Frame("GirdLayout example");

    	Button b1=new Button("b1");
    	Button b2=new Button("b2");
    	Button b3=new Button("b3");
    	Button b4=new Button("b4");
    	Button b5=new Button("b5");
    	Button b6=new Button("b6");

    	f.setLayout(new GridLayout(3,2));

    	f.add(b1);
    	f.add(b2);
    	f.add(b3);
    	f.add(b4);
    	f.add(b5);
    	f.add(b6);

    	f.pack();//不写PACK就不显示,打包
    	f.setVisible(true);

    }
}

习题

package com.zzk.cn;

import java.awt.*;

public class TenButtons {
    public static void main(String[] args) {

    	Frame f=new Frame("Java Frame");
    	f.setLayout(new GridLayout(2,1));//两行一列
    	f.setLocation(300,400);
    	f.setSize(300,200);
    	f.setBackground(new Color(204,204,255));

    	Panel p1=new Panel(new BorderLayout());
    	Panel p2=new Panel(new BorderLayout());

    	Panel p11=new Panel(new GridLayout(2,1));
    	Panel p21=new Panel(new GridLayout(2,2));

    	p1.add(new Button("1"),BorderLayout.WEST);
    	p1.add(new Button("1"),BorderLayout.EAST);

    	p11.add(new Button("2"));
    	p11.add(new Button("3"));

    	p1.add(p11,BorderLayout.CENTER);
    	p2.add(new Button("4"),BorderLayout.WEST);
    	p2.add(new Button("5"),BorderLayout.EAST);

    	for(int i=1;i<=4;i++) {
    		p21.add(new Button("6"));
    	}

    	p2.add(p21,BorderLayout.CENTER);

    	f.add(p1);
    	f.add(p2);
    	f.setVisible(true);
    }
}
时间: 2025-01-21 02:33:05

马士兵 J2SE 第11章 GUI编程 GUI初步和布局管理器的相关文章

马士兵 J2SE 第11章 GUI编程 事件模型ACTIONEVENT TEXTFIELD事件监听 内部类 PAINT adapter和repaint window事件 键盘事件

BUTTON事件监听 package com.zzk.cn; import java.awt.*; import java.awt.event.*; public class TestActionEvent { public static void main(String[] args) { Frame f=new Frame("Test"); Button b=new Button("Press Me!"); Monitor bh=new Monitor(); b

高质量C++/C编程指南-第11章-其它编程经验(2)

11.1.3 const成员函数 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性. 以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数.编译器将指出GetCount函数中的错误. class Stack { public: void Push(int elem); int Pop(void); int

高质量C++/C编程指南-第11章-其它编程经验(1)

11.1 使用const提高函数的健壮性看到const关键字,C++程序员首先想到的可能是const常量.这可不是良好的条件反射.如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮.const更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const是constant的缩写,"恒定不变"的意思.被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:"Use const whenever you

JAVA图形界面(GUI)之布局管理器

一个友好的读者界面是一款软件成功的关键因素之一.布局管理器就是用来管理读者的界面.摆放的效果直接影响到界面是否美观.布局管理器通过布局管理类来对各种读者组件进行管理. 使用布局管理器,不仅可以有序的排列组件,而且当窗体发生变化时,布局管理器很根据新版面来适配窗口大小. 如果设计时未指定组件的布局管理器,则使用默认布局管理器.默认布局管理器层次关系如图所示: 下面为大家介绍几种常用的布局管理器. BorderLayout(边框布局) BorderLayout是定义在AWT包中的布局管理器.Bord

关于MQ7.1 的 C++编程,无法打开队列管理器

问题描述 我的操作系统是windows732位,本地机器上已经安装了MQ7.1服务版.利用C++API访问MQ的队列管理器时,一直连接失败,错误码2058.源代码如下://连接到队列管理器KTDSImqQueueManagerimqQM;imqQM.setName("KTDS");if(!imqQM.connect()){printf("连接到队列管理器KTDS失败,原因:%dn",imqQM.reasonCode());return;} 另外MQ自带的C++例子中

Java布局管理器使用方法_JSP编程

很多初学者在用Java布局器自动布局画界面时,经常遇见不知道如何定义区域大小或按钮之间的距离等问题.我写过一篇<实现JAVA手动布局中各个组件能随窗口变化的方法>的文章,有读者反映算坐标不好算,问能不能用布局器实现文章中的界面.其实自动布局也可以解决定义区域大小或按钮之间的距离等问题,只是没有手动布局那么灵活.下面我就举一个例子. 首先,建一个frame文件(Application应用程序),在Design中将this中的layout设置为BorderLayout. 第二,在组件盘内点选Swi

《 Python树莓派编程》—— 2.5 包管理器

2.5 包管理器 当你需要在Windows中安装一个程序时,通常你需要下载一个.exe或.msi文件,双击这个文件并按照指示进行安装.类似地,如果你用的是Mac,下载一个.dmg文件,将解压后的文件拷入你的硬盘,或者运行安装包文件,都可以完成安装操作. 在Linux中稍有些不同.Linux使用安装包系统,或者说包管理器(package manager)对软件进行跟踪.操作系统使用包管理器进行下载.安装.升级.配置及删除程序.大多数包管理器都有一个包含安装软件的内部数据库,数据库内也含有一些软件之

java Gui编程 事件监听机制

1.     GUI编程引言     以前的学习当中,我们都使用的是命令交互方式:        例如:在DOS命令行中通过javac java命令启动程序.     软件的交互的方式:      1. 命令交互方式           图书管理系统     2. 图形交互方式     ava提供了专业的API用于开发图形用户界面     GUI--> Graphic  User   Interface      将要了解GUI API的框架结构,以及GUI组件以及组件之间的关系,容器和布局管理

windows图标管理器怎么编程实现?

问题描述 windows图标管理器怎么编程实现? windows图标管理器怎么编程实现?怎么在listview里得到打开的exe里面得到其中的图标? 解决方案 http://www.lvcode.com/htm/5104.html