本程序的功能是监听对于菜单项和工具条按钮的操作。主窗口中有菜单、工具条和一个文字标签,菜单中有“文件”项,“文件”菜单中包括菜单项“新建”、“保存”、“打印”、“页面设置”和“退出”,工具条上包括按钮“新建”、“保存”、“打印”、“页面设置”和“退出”。单

admin2009-12-22  34

问题 本程序的功能是监听对于菜单项和工具条按钮的操作。主窗口中有菜单、工具条和一个文字标签,菜单中有“文件”项,“文件”菜单中包括菜单项“新建”、“保存”、“打印”、“页面设置”和“退出”,工具条上包括按钮“新建”、“保存”、“打印”、“页面设置”和“退出”。单击任何一个菜单项或任何一个工具条按钮,文字标签都会显示哪个构件被选中。请更正题中带下划线的部分。运行结果如下图所示。
   
   注意:不改变程序的结构,不得增行或删行。
   import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
   public class advance extends JFrame
   {
      private JLabel actionlnfo;
      public advance(String titleText)
      {
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         super(titleText);
         actionInfo=new JLabel("事件信息");
         JToolBar tb=new JTooBar();
         Menu file=new Menu( "文件" );
         JMenuBar mb=new JMenuBar();
         mb.add(file);
         NewAction na=new NewAction(actionInfo);
         file.add(na);
         tb.add(na);
         SaveAction sa=new SaveAction(actionInfo);
         file.add(sa);
         tb.add(sa);
         PrintAction pta=new PrintAction(actionInfo);
         file.add(pra);
         tb.add(pra);
         PageSetAction psa=new PageSetAction(actionInfo);
         file.add(psa);
         tb.add(psa);
         ExitAction ea=new ExitAction(actionInfo);
         file.add(ea);
         tb.add(ea);
         setJMenuBar(mb);
         Container cp=getContentPane();
         cp.setLayout(new BorderLayout());
         cp.add(tb);
         cp.add(actionInfo, BorderLayout.CENTER );
         setSize(350, 200);
         setVisible(true);
      }
      public static void main(String[] args)
      {
         new advance("advance");
      }
 }
 class NewAction extends AbstractAction
 {
      JLabel label;
      public NewAction(JLabel label)
      {
         super("新建");
         this.label=label;
      }
      public void actionPerformed(ActionEvent e)
      {
         label.setText("您选择了新建");
      }
 }
 class SaveAction extends AbstractAction
 {
      JLabel label;
      public SaveAction(JLabel label)
      {
     super("保存");
     this.label=label;
      }
      public void actionPerformed(ActionEvent e)
      {
     label.setText ("您选择了保存");
      }
  }
 class printAction extends AbstractAction
 {
      JLabel label;
      public PrintAction(JLabel label)
      {
         super("打印");
         this.label=label;
      }
      public void actionPerformed(ActionEvent e)
      {
     label.setText ("您选择了打印");
      }
 }
 class PageSetAction extends AbstractAction
 {
      JLabel label;
      public pageSetAction(JLabel label)
      {
         super("页面设置");
         this.label=label;
      }
      public void actionPerformed(ActionEvent e)
      {
         label.setText("您选择了页面设置");
      }
 }
 class ExitAction extends AbstractAction
 {
      JLabel label;
      public ExitAction(JLabel label)
      {
         super("退出");
         this.label=label;
      }
  public void actionPerformed(ActionEvent e)
  {
     label.setText ("您选择了退出");
  }
}

选项

答案setTitle(titleText) JMenu file=new JMenu("文件") cp.add(tb,BorderLayout.NORTH)或cp.add("North",tb)

解析 本题考查知识点:类的继承、AWT和Swing的区别、布局管理器的使用。解题思路:程序中声明了一个菜单构件、一个工具栏构件,声明了5个事件添加到菜单和工具栏中。子类继承父类以后,可以调用父类的public、protected成员变量和成员方法。子类还可以使用变量super,访问已经被隐藏或被覆盖了的父类成员变量和方法。题中,JFrame带一个参数的构造方法已经被子类advance的构造方法覆盖。原题打算使用super调用父类的构造方法,为框架添加变量titleText定义的名字。这样的操作可以实现,但是super变量要求必须写在其所在的方法的第一行,而本题中super变量前还有语句setDefaultCloseOperation。因此在第1条下划线的位置不能使用super,只能调用set Title()方法,该方法可以为框架设置名字。file是一个AWT构件Menu的对象,而它所在的容器mb是一个Swing的JMenuBar对象,两类不同的构件,实现的方法不一样,不能使用add方法进行添加。因此在第2条下划线处需要把file的类型改为JMenu。容器定义了BorderLayout布局管理器以后,如果添加构件时不指明添加的位置,则会把该构件添加到Center的位置。由于本题中不需要把名为actionInfo的JLabel构件添加到Center的位置,所以在第3条下划线处,添加tb构件时必须指明位置参数。本题答案中根据习惯把工具栏添加到容器的顶部,当然,添加到容器的South、East或West位置也都正确。
转载请注明原文地址:https://kaotiyun.com/show/jcnp777K
0

最新回复(0)