知ing

Java语言程序设计(第三版)

邵丽萍,邵光亚,张后扬 编 / 清华大学出版社

拼命菇凉@ 上传

查看本书

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):设置边界是否可被画

查看更多