9.1 窗口
9.1.1 创建可关闭窗口
窗口所对应的类为java.awt.Frame,它是java.awt.Window的子类,其常用方法:
方 法
功 能
返回
类型
Frame( )
创建一个初始不可见的窗口
void
Frame(String title )
创建一个指定标题的初始不可见的窗口
void
setMenuBar(MenuBar mb)
设置菜单栏
void
remove(MenuComponent mc)
移除菜单栏
void
setVisible(boolean b)
设置是否可见
void
setTitle(String title)
设置标题
void
setSize(int length,int width)
void
例:import java.awt.*;
import java.awt.event.*;
class Frame1 extends Frame{
public Frame1(){
//窗口构造函数,此例没有调用父类构造函数而是直接在子类中设置窗口属性
Label l=new Label("HI"); //定义窗口中的标签
this.add(l); //在窗口中显示标签
this.setSize(new Dimension(400,300)); //设置窗口大小
this.setTitle("My sceond Frame"); //设置窗口标题 }}
public class SC{
boolean packFrame=false;
public SC(){
Frame1 frame=new Frame1();
frame.setVisible(true); }
public static void main(String args[])
{new SC();} }
9.1.2 窗口事件适配器
例P188
9.1.3 匿名类
例P189
9.1.4 在窗口中加入组件
例P190 import java.awt.*;
import java.awt.event.*;
public class SC extends Frame implements ActionListener{
Button btn1,btn2;
TextField f;
SC( ){
super("Window4"); //调用父类构造函数创建标题为Window4窗口
addWindowListener(new WindowAdapter(){
public void windowsClosing(WindowEvent e){
System.exit(0); }});
setSize(350,200);
btn1=new Button("显示");
btn2=new Button("退出");
f=new TextField(20);
setLayout(new FlowLayout());
add(f);
add(btn1);
add(btn2);
btn1.addActionListener(this);
btn2.addActionListener(this);
show();// 改为setVisible(true);效果一样
}
public static void main(String args[]){
new SC(); }
public void actionPerformed(ActionEvent e){
f.setText("你按下了“"+e.getActionCommand()+"”按钮");
if (e.getSource()==btn2){
for (int i=0;i<1000000000;i++);
System.exit(0);
}}}
注:show或setVisible方法必须位于添加组件语句之后,否则组件显示不出来
9.1.5 多重窗口
例P192
9.2 菜单
菜单与其他组件有所不同,无法直接将菜单添加到容器的某一位置,也无法使用布局管理器对其加以控制,菜单只能被添加到“菜单容器”中
1.菜单条(MenuBar)
是一个水平菜单,它只能被添加到Frame对象中,作为整个菜单树的根基(容器),直接在由java.applet.Applet生成的小应用程序中不能加入菜单,必须先创建窗口。
说明:Swing中的菜单类全部是从Jcomponent类继承而来的,因此可以在任何Jcontainer(包括JApplet)中放置菜单的JmenuBar,而Applet中是不能直接加入菜单的。
Frame fr=new Frame(“菜单条示例”) ;
MenuBar mb=new MenuBar( );
fr.setMenuBar(mb);
fr.setSize(150,100);
fr.setVisible(true);
说明:菜单条(MenuBar)不支持Listener。因为在其中所发生的各种事件,将会自动由菜单项处理。
2.菜单(Menu)
Menu类提供了标准下拉菜单,它可以被添加到菜单条中或其他菜单中
Frame fr=new Frame(“菜单条示例”) ;
MenuBar mb=new MenuBar( );
fr.setMenuBar(mb);
Menu m1=new Menu(“File”);
Menu m2=new Menu(“Edit”);
Menu m3=new Menu(“Help”);
mb.add(m1); mb.add(m2);
mb.setHelpMenu(m3);//在界面上设置帮助菜单
fr.setSize(150,100);
fr.setVisible(true);
3.菜单项(MenuItem)
菜单项是菜单树的“文本叶子”
Menu m1=new Menu(“File”);
MenuItem mi1=new MenuItem(“Save”); //创建“Save”的菜单项
MenuItem mi2=new MenuItem(“Load”);
MenuItem mi3=new MenuItem(“Quit”);
m1.add(mi1); m1.add(mi2);
m1.addSeparator( ); // 添加一条分隔线
m1.add(mi3);
4.复选框菜单项(CheckboxMenuItem)
Menu m1=new Menu(“File”);
MenuItem mi1=new MenuItem(“Save”);
CheckboxMenuItem mi2=new CheckboxMenuItem (“Load”);
//带复选框的菜单项
m1.add(mi1); m1.add(mi2);
CheckboxMenuItem可以通过ItemListener接口进行监听,当复选框状态发生变化后,itemStateChanged()方法将被调用
5.弹出式菜单项(PopupMenu)
弹出式菜单可以在任一组件上弹邮,同时也可以在弹出式菜单中添加菜单项和菜单。弹出式菜单必须被添加到某一“父”组件上
Frame fr=new Frame("PopupMenu");
Button b=new Button("Press Me");
fr.add(b);
PopupMenu p=new PoupMenu("Popup");
MenuItem s=new MenuItem("Save");
MenuItem l=new MenuItem("Load");
fr.add(p);
b.addActionListener(this);
p.add(s); p.add(l);}
如果想要显示弹出式菜单,则需要调用show()方法,如本例使用一个按钮作为触发装置,点击按钮就弹出该PopuMenu
public void actionPerformend(ActionEvent e){
p.show(b,10,10);}
菜单总结:
第一步:定义菜单栏MenuBar类的对象:
MenuBar 对象名=new MenuBar( );
第二步:定义菜单Menu类的对象:
Menu 对象名=new Menu(“菜单名”);
第三步:定义菜单项MenuIttem类的对象:
MenuItem 对象名=new MenuItem(“菜单项名”);
或定义选项子菜单CheckboxMenuItem类的对象:
CheckboxMenuItem 对象名=new CheckboxMenuItem(“选项名”);
第四步:在Frame中加入菜单栏:
Freme类对象名.setMenuBar(“MenuBar类对象名”);
第五步:在MenuBar中加入菜单:
MenuBar类对象名.add(“Menu类对象名”);
第六步:在Menu类的对象中加入菜单项:
Menu类对象名.add(“MenuItem类对象名”);
或Menu类对象名.add(“CheckboxMenuItem类对象名”);
MenuBar类的常用成员方法:
public void MenuBar( ):构造一个菜单栏
public Menu add(Menu m):将指定的菜单加入菜单栏
public void remove(int index):删除指定位置上的菜单
public void remove(MenuComonent):删除指定的菜单
Menu类的常用成员方法:
public void Menu():构造一个菜单
public void Menu(String label):以指定标签构造一个菜单
public MenuItem add(MenuItem mi):增加一个菜单项
public void add(String label):与add(new MenuItem(label))等价
public void remove(int index):删除指定位置上的菜单项
public void remove(MenuComponent mc):删除指定的菜单项
public void removeAll():删除所有的菜单项
public void insert(MenuItem mi,int index):在指定位置处插入一菜单项
public void insert(String label,int index):在指定位置处插入一菜单项
public void insertSeparator(int index):在指定位置处插入一分隔符
MenuItem类的常用成员方法:
public void MenuItem( ):构造一个菜单项
public void MenuItem(String label):以指定标签构造一个菜单项
public void MenuItem(String label,MenuShortcut s):以指定标签和快捷键构造一个菜单项
public void setLabel(String Label):设置菜单项标签
public void setShortcut(MenuShortcut s):设置快捷键
setActionCommand(String command):设置由菜单项引发的动作事件的命令字符串,命令字符串的默认值为菜单项的标签
getActionCommnad():取得事件源的命令字符串
deleteShorcut():删除与该菜单项相关的快捷键
setEnabled(boolean b):设置菜单项是否可选
例:
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class SC extends Applet{
MyFrame f=new MyFrame("My first Frame");
Button b1=new Button("Open");
Button b2=new Button("Close");
MenuBar mb1=new MenuBar();
Menu fi=new Menu("File");
MenuItem file[]={new MenuItem("Open",new MenuShortcut(KeyEvent.VK_O)),
//ctrl+S
new MenuItem("Save",new MenuShortcut(KeyEvent.VK_S)),
//设置快捷方法Ctrl+S
new MenuItem("Exit",new MenuShortcut(KeyEvent.VK_E))};
//Ctrl+E
public void init(){
add(b1);
add(b2);
f.setMenuBar(mb1);
mb1.add(fi);
for (int i=0;i<file.length;i++)
{fi.add(file[i]);}
b1.addActionListener(new b1L());
b2.addActionListener(new b2L());
f.setSize(200,300);}
class b1L implements ActionListener{
public void actionPerformed(ActionEvent e){
f.setVisible(true);}}
class b2L implements ActionListener{
public void actionPerformed(ActionEvent e){
f.setVisible(false);}}
class MyFrame extends Frame{
Label L1=new Label("My Applet Frame");
MyFrame(String s){
super(s);
add(L1); }}}
9.3 对话框
9.3.1 自定义对话框
Dialog构造方法:
Dialog(Frame owner):在指定Frame中构造一无标题的、无模式的对话框
Dialog(Frame owner,boolean model):在指定Frame中构造一无标题的对话框,当model为true时有模式(必须先处理对话框),model为false时无模式
Dialog(Frame owner,String title,boolean model):标题为title,其他同上
Dialog(Dialog owner):在指定Dialog中构造一无标题的、无模式的对话框
Dialog(Dialog owner,boolean model):
Dialog(Dialog owner,String title,boolean model):
常用成员方法:
public void setTitle(String title):设置标题
public void show():显示对话框
public void hide():隐藏对话框
public void setVisible(boolean b):b为true显示对话框,为false不显示
例:import java.awt.*;
import java.awt.event.*;
class SC{
public static void main(String abc[]){
Frame f=new Frame("HI") ;
f.setSize(300,200);
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{System.exit(0);} //可关闭窗口
});
Dialog d=new Dialog(f,"HI",false);
d.setSize(100,150);
d.show(); }}
9.4 Swing简介
Swing和AWT的最大差别在于Swing组件类不带本地代码,因此不受操作系统平台的限制,具有比AWT组件更强的功能。
> Swing按钮类和标签类除了显示文本标题外还可以显示图像标题
> 可以为Swing容器加上边框
> Swing组件能自动适应操作系统的外观,而AWT组件总是保持相同外观
> Swing组件不一定非得是矩形的,可以把按钮设计成圆形
> 可以调用Swing组件的方法心迹其外观和行为
> 增加了一个丰富的高层构件集合,如表格(JTable)、树(JTree)
缺点:慢
特点:
> 类的属性被命名为xxx,则相应的的方法命名为:getXxx()、setXxx()、isXxx()
> Swing使用同AWT相同的事件模型。处理Swing中的事件时除了使用java.awt.event包外,还要用到javax.swing.event包
> 大多数情况下在老的AWT组件前加一个“J”即为Swing组件
Swing组件的分类
> 顶层容器:包括JFrame、JApplet、JDialog、Jwindow
> 普通容器:包括JPanel、JScrollPane、JtablePane
> 特殊容器:包括JLayeredPane、JRootPane、JtoolBar
> 基本控件:JButton、JCombox、JList、JMune、JTextFiled等
> 不可编辑信息组件:如JLabel、JprogresserBar
> 可编辑信息组件:如JTextFiled、JTree、JFileChooer、JTable
9.4.1 Swing按钮与标签
1.按钮(JButton)
构造方法:
Jbutton():构造一个没有标签和图标的按钮
Jbutton(Icon icon):构造一个带有图标的按钮
Jbutton(Sting text):构造一个带有标签的按钮
Jbutton(Sting text,Icon icon):构造一个带有标签和图标的按钮
主要成员方法:
public boolean isDefaultButton():返回这个按钮是否为RootPane的默认按钮
setIcon(Icon icon):设置按钮图标
setDisableIcon(Icon icon):设置按钮不激活时显示图标
setRolloverIcon(Icon icon):设置鼠标移到按钮上的图标
setPressedIcon(Icon icon):设置鼠标按下的图标
2.标签(JLabel)
构造方法:
JLabel(Icon icon):构造一个带图片的标签
JLabel(Icon icon,int horizontalAlignment):构造一个带图片且水平对齐的标签
JLabel(String text):构造一个带文本的标签
JLabel(String text,int horizontalAlignment):构造一个带文本且水平对齐的标签
JLabel(String text, Icon icon ,int horizontalAlignment):构造一个带文本图片且水平对齐的标签
主要成员方法:
getIcon():获取JLabel显示的图像对象
setIcon(Icon icon):设置需要显示的图像
getText():返回Jlabel标签显示的字符串
setText(String text):设置需要显示的字符串
getHorizontalAlignment():返回沿X轴的标签内容的对齐方式
setHorizontalAlignment():设置沿X轴的标签内容的对齐方式
getVerticalAlignment():返回沿Y轴的标签内容的对齐方式
setVerticalAlignment():设置沿Y轴的标签内容的对齐方式
9.4.2 Swing工具栏(JToolBar)
作为一个容器来包容任何组件,它支持拖运
构造方法:
JToolBar():构造一个工具栏
JToolBar(int orientation):构造一个指定方向的工具栏
主要成员方法:
addSeparator():在JToolBar的末尾增加一个分割符
addSeparator(Dimension size):在JtoolBar的末尾增加一个指定宽度分割符
getComponentAtIndex(int i):返回指定索引的组件
getComponentAtIndex(Component c):返回指定组件的索引
getOrientation():返回工具栏的方向
setOrientation(int o):设置工具栏的方向
remove(Component comp):从工具栏中删除组件
setBorderPainted(boolean b):设置边界是否可被画