丁保国的博客

收集整理工作生活,点点滴滴

  :: :: 博问 :: 闪存 :: :: :: :: 管理 ::

第十九讲菜单和JavaGUI综合设计

 

主要内容

 

菜单(JMenuBarJMenuJmenuItem)

菜单项的事件侦听处理

颜色选择器JColorChooser

文件选择器JFileChooser

Swing中常用组件使用归纳

GUI程序设计相关练习

菜单(JMenuBarJMenuJmenuItem)

菜单概述

菜单的作用:给应用程序设置操作菜单。

菜单组成

JMenuItem---菜单项,直接指向一个具体的操作

JMenu---菜单,其中可加入菜单项(JMenuItem)和菜单(Jmenu)

JMenuBar----菜单栏,在其中可以加入菜单(JMenu

JMenu

JMenuBar

JMenuItem

 

 

菜单(项、栏)的构造方法

菜单类别

构造方法

菜单栏

JMenuBar()

菜单

JMenu(String s)

菜单项

JMenuItem(String s)

 

菜单的组织方法

任务

方法

JMenuBarèJFrame

JFrame对象.setJMenuBar(JMenuBar m)

JMenuè JMenuBar

JMenuBar对象.add(JMenu对象)

JMenuJmenuItem、分隔线

è JMenu

JMenu对象.add(JMenu对象)

JMenu对象.add(JmenuItem对象)

JMenu对象.addSeparator();

 

一个简单的菜单示例

 

窗口分析

窗口中置放了一个菜单和多行文本框(不同的放置方法)

 

菜单分析

一个菜单栏:mb

三个菜单:filesendconfig

七个菜单项:opennnewexitsmsffcbc

 

颜色选择器JColorChooser

JColorChooser

 

可通过调色板进行颜色的选择,默认的调色板如图。也可以自己设定调色板中的颜色种类。

 

 

 

构造方法

JColorChooser()创建一调色板,初始色为白色。

JColorChooser(Color initialColor)创建一调色板,初始色可由用户指定。

常用方法

public static Color showDialog(Component component, String title, Color initialColor)

显示调色板对话框,返回用户选择的颜色Color

title——对话框标题,initialColor——初始颜色。

 

练习:试分析设计如下窗口。

 

import java.awt.event.*;

import java.io.*;

import javax.swing.*;

import java.awt.*;

 

class ChooseColor extends JFrame implements ActionListener{

  JButton b= new JButton("Change");

  JTextArea t= new JTextArea(6, 30);

  ChooseColor() {

     setTitle("Change Color");

     setDefaultCloseOperation(3);

     setBounds(300, 200,350,200);

     Container c= getContentPane();

     c.setLayout(new FlowLayout());

     c.add(b);

     c.add(new JScrollPane(t));

     b.addActionListener(this);

     setVisible(true);

  }

 

  public void actionPerformed(ActionEvent ac ){

 

  }

 

   public static void main(String args[]) throws Exception{

     new ChooseColor();

  }

}

 

文件选择器JFileChooser

JFileChooser

 

可用于打开、保存文件时的文件选择。

 

 

构造方法

JFileChooser()

构造文件选择器,指向用户的默认目录。

JFileChooser(File currentDirectory)

JFileChooser(String currentDirectoryPath)

构造文件选择器,指向特定目录。

 

常用方法

public int showDialog(Component parent, String text)

public int showOpenDialog(Component parent)

显示文件选择对话框,用户可自定义“通过按钮”文本。(默认“打开”)

public int showSaveDialog(Component parent)

显示文件保存对话框。

public File getSelectedFile()

返回所选择的文件

 

练习:试分析设计如下窗口。

 

菜单项事件的侦听处理

菜单项事件和事件处理

当用户选定菜单项时,将发生ActionEvent事件

事件处理三要点

²       安装侦听器 (implements ActionListener)

²       通过addActionListener(this)设置侦听

²       重写方法public void actionPerformed(ActionEvent e){},其中需要捕捉发生事件的菜单项,进行分别处理。

 

可接受事件的菜单示例

问题:修改Firstmenu.java,使菜单上除了send E-mail之外的每一个菜单项都能有恰当的响应。

        

事件设计分析:

²       本例处理三个菜单项选择事件

菜单项

事件分析

New

清空文本框

Open

从文件打开对话框选取文件,并导入内容到文本框

Send file

从文件保存对话框选取(输入)文件名,并实现保存

Exit

退出程序运行

Font

字体设置

Forecolor

从颜色选择对话框选取颜色,设置为文本框的前景色

Backcolor

从颜色选择对话框选取颜色,设置为文本框的背景色

 

 

 

Swing中常用组件使用归纳

Swing包中的常用组件

组件名称

说明

框架

JFrame

常通过继承的方法使用

用来生成GUIJava应用程序

通常需要设置标题、尺寸、预设关闭、显示等。

加入组件时应先获取窗口的容器(getContentPane)并进行布局

标签

JLabel

颜色、字体、内容等设定

文本框

JTextField JTextArea

颜色、字体、内容等设定。对于多行文本框,可合成在JScrollPane中,以生成滚动条

在文本框内按回车键,将发生ActionEvent事件

按钮

JButton

需要侦听和处理ActionEvent事件

面板

JPanel

用以进行窗口组件的灵活布局

JPanel默认的布局方式为FlowLayout

复选框

JCheckBox

用来进行交互设置。可用复选框的isSelected()方法测试复选框有无被选中。当操作复选框时,将发生ActionEvent事件

单选按钮

JRadioButton

需要与按钮组ButtonGroup配合使用

当操作单选按钮时,将发生ActionEvent事件

组合框

JComboBox

用来列出多个选项,下拉时可供用户选择。可用getSelectedIndex()方法来获取用户选项的序数。其值从0开始,为-1时没有一项被选中。当用户选择时,也将激发ActionEvent事件

列表框

JList

直接用列表的方式列出多个选项。也可用getSelectedIndex()方法来获取用户选项的序数。当用户选取时,将发生ListSelectionEvent事件。

滚动面板

JScorllPane

可为多行文本框、列表框直接定制需要的滚动条

菜单项

JMenuItem

直接指向操作,需要加入菜单后才可使用。当用户选取时,将发生ActionEvent事件

菜单

JMenu

用来组织菜单项,也可包含菜单(可理解为有下层菜单的菜单项)

菜单栏

JMenuBar

可用以组织窗口的菜单。可通过setJMenuBar方法,将菜单栏嵌入到JFrame窗口

文件选择器

JFileChooser

打开或保存文件用到,可打开文件对话框

颜色选择器

JColorChooser

选取颜色时用到,可打开调色板,选择颜色。

 

 


ActionEvent事件处理框架

第一步

 


public class JFrameTest extends JFrame implements ActionListener{

   JFrameTest(String title){

      .....

      JButton btn = new JButton("SampleButton");

第二步

      btn.addActionListener(this);

第三步

      .....

   }

 


   public void actionPerformed(ActionEvent e){

      /* 事件处理程序 */

      .....

   }

   public static void main(String[] args){

       ......

   }

}

 

GUI程序设计相关练习

GUI程序设计基本概念

1.下面组件中不属于swing包的是___ ____

a.JLabel    b.JFrame    c.ButtonGroup   d.JMenu

 

2.下面不属于容器的是____ _____

a.文本框    b.对话框   c.窗口

 

3.容器可以被添加到其它容器中去。___ ____

a.正确      b.不正确

 

4.组件可以被添加到容器中去。____

a.正确      b.不正确

 

5.容器可以添加到组件中去。__ _____

a.正确      b.不正确

 

6.组件可以被添加到其它组件中去。__ ___

a.正确      b.不正确

 

7. 标签JLabel创建完毕,其上的显示信息就不能在程序中动态修改。

a.       b.

 

8.要获得一个JLabel上显示的文本信息,应使用_________方法。

a.setText   b.getText c.getContent

 

9.Java语言中,复选框类名是____________

a.JButton   b.JCheckbox  c.JRadioButton  d.JComboBox

 

10.Java语言中,单选框类名是____________

a.JButton   b.JCheckbox  c.JRadioButton  d.JComboBox

 

11. 复选框的外观是________

a.一个小正方形     b.一个小圆形 c.一个小三角形

 

12.单选框的外观是________

a.一个小正方形     b.一个小圆形 c.一个小三角形

 

13.组合框和列表框中第一项的项目编号(也称索引)是________

a.0     b.1        c.-1       d.10

 

14.可以使用__________________方法,取得当前选择的项目的索引值。

a. getSelectedIndex()     b. getItem() c. getNumber()

 

15.在多行文本框中________输入超过程序中定义的行数。

a.        b.不能

 

16.可以使用______________来清除文本框text1中的文本。

a.text1.clearText()   b.text1.setText(“”)

c.text1.deleteText() d.以上都可以

 

17.在程序中_______________,就能够实现多行文本框内容的自动换行。

a.不需要做任何考虑

b.textarea1.setLineWrap(true)

c.textarea1.setLineWrap(false)

d.textarea1.noWrap()

 

18.如果我们使用textfield1=new JTextField(TEST)来创建一个文本框,那么这个文本框的宽度有多大?

 

GUI程序设计基本操作

1)编程创建只容许了一个按钮的窗口。单击该按钮能自动更改其上文字,在没有单击它之前,按钮提示为“Click me”,在用户单击以后显示“Click n”(n为单击次数)

   

 

2)设计如下图所示的加法器。

 

 

3)设计简单的Java记事本,如图所示。

 

 

菜单程序清单:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

 

class MenuTest extends JFrame implements ActionListener{

   JMenuBar mb;

   JMenu file,send,config;

   JMenuItem op,ne,ex,sf,se,fc,bc;

   JTextArea t;

  

   MenuTest(){

       super("My First Menu Try.");

       this.setDefaultCloseOperation(3);

       menuInit();

       this.setJMenuBar(mb);

       this.getContentPane().add(new JScrollPane(t));

       this.setBounds(300,200,600,400);

       this.setVisible(true);     

   }

   void menuInit(){

       mb=new JMenuBar();

       file=new JMenu("File");

       send=new JMenu("Send");

       op=new JMenuItem("Open");

       ne=new JMenuItem("New");

       ex=new JMenuItem("Exit");

       se=new JMenuItem("E-mail");

       sf=new JMenuItem("File");

       mb.add(file);

       file.add(op);file.add(ne);

       file.add(send);

       file.addSeparator();

       file.add(ex);

       send.add(se);send.add(sf);

      

       config=new JMenu("Config");

       fc=new JMenuItem("Forecolor");

       bc=new JMenuItem("Backcolor");

       mb.add(config);

       config.add(fc);

       config.add(bc);

      

       op.addActionListener(this);

       ne.addActionListener(this);

       sf.addActionListener(this);

       ex.addActionListener(this);

       fc.addActionListener(this);

       bc.addActionListener(this);

      

       t=new JTextArea();

       t.setLineWrap(true);

   }

   public void actionPerformed(ActionEvent e){

       Object o=e.getSource();

       JFileChooser f=new JFileChooser();

       JColorChooser cc=new JColorChooser();

       if(o==ne){

          t.setText("");

       }

       else if(o==op){

          f.showOpenDialog(this);

          try{

              StringBuffer s=new StringBuffer();

              FileReader in=new FileReader(f.getSelectedFile());

              while(true){

                 int b=in.read();

                 if(b==-1)break;

                 s.append((char)b);

              }

              t.setText(s.toString());

              in.close();

          }

          catch(Exception ee){}

       }

       else if(o==sf){

          f.showSaveDialog(this);

          try{

              FileWriter out=new FileWriter(f.getSelectedFile());

              out.write(t.getText());

              out.close();

          }

          catch(Exception ee){}

       }

       else if(o==ex)System.exit(0);

       else if(o==bc){

          Color c=cc.showDialog(this,"Please select",Color.white);

          t.setBackground(c);

       }

       else{

          Color c=cc.showDialog(this,"Please select",Color.black);

          t.setForeground(c);

       }

   }

  

   public static void main(String[] aa){

       new MenuTest();

   }

}

 

posted on 2007-07-21 10:57  丁保国  阅读(1229)  评论(3编辑  收藏  举报