java中2_JAVA中AWT基本组件及其使用方法(二)

十一、框架

框架是一种带标题和边框,并且能够改变大小的窗口,它有两种构造方法:

(1) Frame()

构造一个没有标题的框架

(2)

Frame(String)构造一个显示指定标题的框架

框架的默认布局管理器是BorderLayout。框架的大小可以用setSize()方法设定,然而更常用的方法是使用pack(组建ack()能够使用布局管理器进行计算,得出一个适当的框架大小,使得框架以缩紧形式包容其中的组件。

框架可以对多种事件进行监听。框架能够作为单独窗口使用。当用户从窗口控制菜单中选择关闭窗口时,会引发WindowEvent事件,可以用WindowListener接口中的WindowClosing()方法对其进行处理。

注意:不要试图在框架中直接监听键盘事件。尽管在画布组件和标签组件中适用的requestFocus()方法在框架中有时也会起作用,但并不可靠。因此如果要监听键盘事件,最好还是在框架中加入画布或面板之类的组件,然后通过这类组件对键盘事件进行监听。

十二、面板

画板通常只作为纯粹的容器来使用,它不能象框架、窗口和对话框一样独立存在。面板构造方法有两种:

(1) Panel()

构造一个使用默认布局管理器(FlowLayout)的面板

(2)

Panel(LayoutManager) 构造一个使用指定布局管理器的面板

在面板中也可以对多种事件进行监听。与画布类似,当处理键盘事件时,需要事先取得焦点。

十三、对话框

/**

*

对话框(Dialog)是与框架类似的可移动窗口,它与框架的区别在于具有较少的修饰并且能够设置为“模式(modal)”窗口——在该窗口被关闭之前,其他窗口无法接收任何形式的输入。对话框有四种构造方法:

* (1) public Dialog(Frame parent)

构造一个没有标题的对话框

* (2) public Dialog(Frame parent,boolean modal)

构造一个没有标题的对话框,boolean型参数指定对话框是否为模式窗口

* (3) public Dialog(Frame parent,String title)

构造一个显示制定标题的对话框

* (4) public Dialog(Frame parent,Sting

title,boolean modal)

构造一个显示指定标题的对话框,boolean型参数指定对话框是否为模式窗口

*

刚刚创建的对话框是不可见的,需要调用setVisible(true)方法才能将其显示出来。

*

下面的程序构造了一个对话框,当用户单击框架中的按钮时,对话框将被显示出来

* @author ifwater

*/

import java.awt.*;

import java.awt.event.*;

public class DialogExample

extends

WindowAdapter

implements ActionListener{

Frame

f;

Button

b;

Dialog

d;

static

public void main(String args[]){

DialogExample de = new DialogExample();

de.go();

}

public void

go(){

f = new Frame("Dialog Example");

b = new Button("Show Dialog");

b.addActionListener(this);

f.add("South",b);

d = new Dialog(f,"Dialog",true);

d.add("Center",new Label("Hello,I'm a Dialog"));

d.pack();

d.addWindowListener(this);

f.setSize(250,150);

f.setVisible(true);

}

public void

actionPerformed(ActionEvent e){

//显示对话框

d.setVisible(true);

}

public void

windowClosing(ActionEvent e){

//隐藏对话框

d.setVisible(false);

}

}

十四、文本对话框

/**

*

文件对话框(FileDialogExample)是一种用于进行文件选择的组件,它是一个独立并且可以移动的窗口,允许用户对文件名进行浏览和选择。

*

文件对话框可以分为两种类型,一种用于装入(load)或者说打开(open)文件,另一种用于保存文件。

*

文件对话框FileDialog类是对话框Dialog的子类,它有三种构造方法:

* (1)public FileDialog(Frame

parent)构造一个不带标题、用于装入文件的文件对话框。

* (2)public FileDialog(Frame parent,String

title)构造一个不带标题、用于装入文件的文件对话框,其中String型参数title指定对话框的标题。

* (3)public FileDialog(Frame parent,String

title,int

mode)构造一个不带标题的文件对话框,其中String型参数title指定对话框的标题,int型参数mode指定对话框的类型(它有两种可取值,分别为LOAD和SAVE。前者表示对话框用于装入文件,后者表示对话框用于保存文件)

* @author ifwater

*

*/

import java.awt.*;

import java.awt.event.*;

public class FileDialogExample

implements

ActionListener {

Frame f;

Button b;

TextArea ta;

FiledDialog fd;

static public void main(String args[]){

FileDialogExample = new FileDialogExample();

fde.go();

}

public void go(){

f = new

Frame("FileDialog Example");

b = new

Button("Show FileDialog");

b.addActionListener(this);

f.add("South",b);

ta = new

TextArea();

f.add("Center",ta);

fd = new

FileDialog(f,"FileDialog");

f.setSize(350,150);

f.setVisible(true);

}

public void actionPerformed(ActionEvent

e){

fd.setVisible(true);

ta.setText("Directory: "+f.getDirectory());

ta.append("\nFilename: "+fd.getFile());

}

}

十五、菜单栏组件

菜单按钮(MenuComponent)是一种特殊组建,只能被放在一种称为“菜单容器”的组件里。

(一)菜单栏

菜单栏(MenuBar)是窗口中的主菜单,用来包容一组子菜单,它只有一个构造方法:

MuneBar()

菜单栏不支持事件监听程序,在菜单栏区域产生的所有事件都会被菜单栏自动处理。

(二)菜单

菜单(Menu)中最基本的是下拉菜单。下拉菜单可以分为两种类型,一种是tear-off菜单,另一种是非tea-off菜单。二者的区别在于:当鼠标键被释放后,tear-off菜单的内容仍然显示在屏幕上。

菜单有三种构造方式:

(1)public

Menu()构造一个不带标签的非tear-off菜单。

(2)public

Menu(String

label)构造一个带指定标签的非tear-off标签,菜单的标签由String型参数指定。

(3)public

Menu(String label,boolean

tearOff)构造一个带指定标签的菜单,菜单的标签由String型参数指定。boolean型参数指定菜单是否为tear-off型菜单。

菜单可以被加入菜单栏或者另一个菜单中。通过MenuBar类中定义的setHelpMenu()方法可以指定某个菜单为帮助菜单。

(三)菜单项

如果将整个菜单系统看作一棵树,那么菜单项(MenuItem)就是这棵树的叶子。菜单项通常被加入菜单中,它有三种构造方式:

(1)public

MenuItem()创造一个没有标签和快捷方式的菜单项

(2)public

MenuItem(String label)创建一个带标签但是没有快捷方式的菜单项

(3)public

MenuItem(String label,MenuShortcut

s)创建一个带标签和快捷方式的菜单项

当菜单中的菜单项被选中时,将会引发一个ActionEvent事件,因此通常需要为菜单项注册ActionListener以便对事件作出反应。

(四)带复选项的菜单项

/**

*带复选框的菜单项(CeckboxMenuItem)是一种特殊的菜单项,在该菜单项的前面有一个复选框,可以对它进行选中或不选中操作。带复选框的菜单项有三种构造方法:

* (1)public

CheckboxMenuItem()构造一个没有标签,初态为未中的菜单项

* (2)public CheckboxMenuItem(String

label)构造一个有标签,初态未选中的菜单项

* (3)public CheckboxMenuItem(String label,boolean

state)构造一个有标签,初态由boolean型参数决定的菜单项

*

当复选框的复选状态发生改变时,会引发ItemEvent事件,可以使用ItemListener中的itemStateChanged()对此事件进行响应。

*

通常在建立菜单系统时,可以首先创建一个菜单栏并通过setMenuBar()方法将其放入某个框架,然后创建若干个菜单,通过add方法将他们加入到不同的菜单中。

* @author ifwater

*/

import java.awt.*;

import java.awt.event.*;

public class MenuExample extends Frame

implements

ItemListener,ActionListener{

TextField tf;

//构造方法

public MenuExample(){

super("Menu

Example");

setSize(300,200);

}

public void init(){

//建立菜单栏

MenuBar mb =

new MenuBar();

setMenuBar(mb);

//建立File菜单

Menu m1 =

new Menu("File");

m1.add(new

Menu("Open..."));

MenuItem mil

= new Menu("Save");

mil.setEnabled(false);

m1.add(mil);

m1.add("Close");

m1.addSeparator();

m1.add("Exit");

//注册监听程序

m1.addActionListener(this);

mb.add(m1);

//建立Option菜单

Menu m2 =

new Menu("Option");

m2.add("Front...");

//建立子菜单

Menu ms =

new Menu("Coler...");

ms.add("Foreground");

ms.add("Background");

ms.addActionListener(this);

m2.add(ms);

m2.addSeparator();

CheckboxMenuItem cm = new CheckboxMenuItem("Always On Top");

cm.addItemListener(this);

m2.add(cm);

m2.addActionListener(this);

mb.add(m2);

//建立Help菜单

Menu h = new

Menu("Help");

h.add("about...");

h.addActionListener(this);

mb.setHelpMenu(h);

tf = new

TextField();

add("South",tf);

}

public static void main(String args[]){

MenuExample

me = new MenuExample();

me.init();

me.setVisible(true);

}

//实现ItemListener接口中的方法

public void itemStateChanged(ItemEvent e){

tf.setText("ItemStateChanged");

}

//实现ActionListener接口中的方法

public void actionPerformed(ActionEvent

e){

tf.setText(e.getActionCommand());

if

(e.getActionCommand()=="Exit"){

System.exit(0);

}

}

}

(五)弹出式菜单

/**

*

弹出式菜单(PopupMenu)是一种比较特殊的独立菜单,它需要通过add()方法加入某个组件,但是又不受布局管理器的控制。

* 弹出式菜单有两种构造方法:

* (1)public

PopupMenu()构造一个没有名称的弹出式菜单

* (2)public popupMenu(String

label)构造一个有指定名称的弹出式菜单

*

弹出式菜单需要依附在某个组件上,虽然也是通过add()方法实现的,但是却和普通的组建加入容器不太一样。因为弹出式菜单不受布局管理器的控制,并且在现实弹出式菜单时,必须调用show()方法:

* public void show(Component origin,int x,int

y)

*

在这个方法中需要有一个组件作参数,该组件应该存在于弹出式菜单所依附的组件中,它的位置将作为显示弹出式菜单的参考原点。

*

下面的程序是一个创建并显示弹出式菜单的例子

*/

import java.awt.*;

import java.awt.event.*;

public class PopupMenuExample

implements

ActionListener{

Frame f;

Button b;

PopupMenu pm;

public static void main(String args[]){

PopupMenuExample pme = new PopupMenuExample();

pme.init();

}

void init(){

f = new

Frame("PopupMenu Example");

b = new

Button("Press me");

b.addActionListener(this);

f.add(b,"Center");

//创建弹出式菜单

pm = new

PopupMenu("Popup");

//加入菜单项

pm.add(new

MenuItem("New"));

pm.add(new

MenuItem("Load"));

pm.add(new

MenuItem("Save"));

pm.add(new

MenuItem("Save as..."));

f.add(pm);

f.setSize(200,200);

f.setVisible(true);

}

//实现ActionListener接口

public void actionPerformed(ActionEvent

e){

//以按钮b的位置为参考原点,在(10,10)显示弹出式菜单

pm.show(10,10);

}

}

十六、控制组件外观

/**

* (一)颜色

*

可以使用下面的两个方法设置组件的前景色和背景色:

* (1)public void setForeground(Color

c)设置前景颜色

* (2)public void setBackground(Color

c)设置背景颜色

*

在这两种方法中,都需要java.awt.Color类的一个实例作为参数,既可以使用Color类中预定义的颜色常量,也可以自己创建新的颜色。

* (二)字体

* 可以使用setFont(Font

f)方法对组件中文本的字体进行设定,这俄国方法需要java.awt.Font类的一个实例作参数。在Java中并没有预定义的字体常量,因此需要通过给定字体名称、风格和大小自己创建Font对象。例如:

* Font f = new

Font("TimesRoman",Font.PLAIN,14);

*

Font构造方法的第一个参数是字体名称,第二个参数是字体的风格,第三个参数是字体的大小,其中有效的字体名称包括:

* Dialog

* Helvetica

* TimeRoman

* Courier

* SansSerif

* Serif

* Monospaced

* DialogInput

* ZapfDingbats

* 字体风格可以是以下几种常量之一:

* Font.BOLD

* Font.ITALIC

* Font.PLAIN

* Font.BOLD+Font.ITLAIC

*/

import java.awt.*;

public class SetFontExample{

public static void main(String args[]){

Frame f =

new Frame("Set Font Example");

f.setLayout(new FlowLayout());

Font

f1,f2,f3,f4;

f1 = new

Font("Dialog",Font.PLAIN,20);

f2 = new

Font("Helvetica",Font.PLAIN,20);

f3 = new

Font("TimesRoman",Font.PLAIN,20);

f4 = new

Font("Courier",Font.PLAIN,20);

TextField

tf1,tf2,tf3,tf4;

tf1 = new

TextField(10);

tf1.setFont(f1);

tf1.setText("Hello");

tf1.add(tf1);

tf2 = new

TextField(10);

tf2.setFont(f2);

tf2.setText("Hello");

tf2.add(tf2);

tf3 = new

TextField(10);

tf3.setFont(f3);

tf3.setText("Hello");

tf3.add(tf3);

tf4 = new

TextField(10);

tf4.setFont(f4);

tf4.setText("Hello");

tf4.add(tf4);

f.setSize(300,150);

f.setVisible(true);

}

}

十七、打印

打印的方式与屏幕显示的方式类似:在打印之前,首先要获取java.awt.Graphics类的一个特殊对象。可以使用Graphics类中的任意绘图方法进行打印,或者,爷爷可以让组件将其自身绘制到Graphics对象中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值