习 题 八
1.AWT包的GUI组件和Swing包的GUI组件有哪些不同? 【答】:
Swing包和AWT包的GUI具有类似的组件,不同之处在于:与AWT的GUI组件相比,Swing是轻量级元件。SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行。
2.什么是重量级组件?什么是轻量级组件?二者的区别是什么? 【答】:
依靠本地方法实现功能的组件称为重量级组件,而反之为轻量级的组件。二者的区别判断的依据是否是依赖本地方法。
3.什么是MVC模式?请举例说明。 【答】:
MVC是一种设计模式,M表示Model,说明业务模型,也就是组件的状态和行为,V表示View视图,处理用户界面的显示;C表示Controller控制器,用来控制用户输入。例如:javax.swing.JButton的组件实例中,一个JButton按钮组件中Model说明了该按钮的状态、操作内部状态、添加删除监听事件、发生的事件;按钮的视图和控制器由一个接口ButtonUI完成。如果一个类实现了这个接口,那么它将会负责创建一个用户界面,处理用户的操作。涉及的方法可以被分为三大类:绘制Paint、返回几何类型的信息和处理事件。
4.编写一个Java程序,实现用户密码输入界面。 【答】:
实现用户密码输入的界面见下列程序。
package javabook.answer.ch08;
import javax.swing.*; import java.awt.*;
public class EX4 extends JFrame { JLabel userLabel; JTextField userText; JLabel passwordLabel; JPasswordField password; JButton confirmBtn; public EX4() { super(\"密码输入\"); userLabel = new JLabel(\"用户名:\"); passwordLabel = new JLabel(\"密码:\"); userText = new JTextField(10); password = new JPasswordField(10); confirmBtn = new JButton(\"确认\"); Container container = getContentPane(); container.setLayout(new FlowLayout()); container.add(userLabel); container.add(userText); container.add(passwordLabel); container.add(password);
}
}
container.add(confirmBtn); pack();
setVisible(true); try { UIManager .setLookAndFeel(\"com.sun.java.swing.plaf.windows.WindowsLookAndFeel\"); SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { JOptionPane.showMessageDialog(null, this); }
public static void main(String args[]) { EX4 cpf = new EX4(); cpf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
5.编写一个Java程序Counter.java,实现一个计算机器的图形界面。 【答】:
Counter.java的程序见下列代码:
package javabook.answer.ch08;
import java.awt.*; import javax.swing.*;
public class EX5 extends JFrame { private Container container; private GridBagLayout layout; private GridBagConstraints constraints; private JTextField displayField;// 计算结果显示区 public EX5() {// 构造方法,定义所有GUI组件 super(\"Counter\"); container = getContentPane(); layout = new GridBagLayout(); container.setLayout(layout); constraints = new GridBagConstraints(); displayField = new JTextField(20); displayField.setHorizontalAlignment(JTextField.RIGHT); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 4; constraints.gridheight = 1; constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 100; constraints.weighty = 100; layout.setConstraints(displayField, constraints); container.add(displayField); addButton(\"Backspace\ addButton(\"CE\ addButton(\"C\ addButton(\"7\ addButton(\"8\ addButton(\"9\
}
}
addButton(\"/\addButton(\"4\addButton(\"5\addButton(\"6\addButton(\"*\addButton(\"1\addButton(\"2\addButton(\"3\addButton(\"-\addButton(\"0\addButton(\" /-\addButton(\".\addButton(\" \addButton(\"=\setSize(300, 300); setVisible(true);
private void addButton(String label, int row, int column, int with, int height) {// 定义按钮 JButton button = new JButton(label); constraints.gridx = row; constraints.gridy = column; constraints.gridwidth = with; constraints.gridheight = height; constraints.fill = GridBagConstraints.BOTH; layout.setConstraints(button, constraints); container.add(button); }
public static void main(String[] args) {// 主程序 EX5 Counter = new EX5(); Counter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
6.编写一个Java程序FileMenu.java,设计一个简易文件管理菜单。菜单有文件、编辑和帮助3项。其中文件菜单项有以下子菜单项:新建、打开、关闭、退出;编辑菜单项有以下菜单项;复制、粘贴、查找、替换、定位;帮助菜单项有以下子菜单项:拥护帮助、版本说明,采用windows操作系统的外观。 【答】:
FileMenu.java的源程序清单见下列代码:
package javabook.answer.ch08;
import javax.swing.*;
public class EX6 extends JFrame { public EX6() { super(\"文件简易菜单\"); defineMenu(); setJMenuBar(menuBar); setVisible(true); setSize(400, 300); }
private void defineMenu() { menuBar = new JMenuBar(); menuBar.setToolTipText(\"FMS文件处理系统1.0\"); }
fileMenu = new JMenu(\"文件(F)\");// 定义文件菜单 fileMenu.setMnemonic('F');
newItem = new JMenuItem(\"新建\"); openItem = new JMenuItem(\"打开\"); closeItem = new JMenuItem(\"关闭\"); exitItem = new JMenuItem(\"退出\"); fileMenu.add(newItem); fileMenu.add(openItem); fileMenu.add(closeItem); fileMenu.add(exitItem);
editMenu = new JMenu(\"编辑(E)\"); editMenu.setMnemonic('E');
copyItem = new JMenuItem(\"复制\"); pasteItem = new JMenuItem(\"粘贴\"); searchItem = new JMenuItem(\"查找\"); replaceItem = new JMenuItem(\"替换\"); locateItem = new JMenuItem(\"定位\"); editMenu.add(copyItem); editMenu.add(pasteItem); editMenu.add(searchItem); editMenu.add(replaceItem); editMenu.add(locateItem);
helpMenu = new JMenu(\"帮助(H)\"); helpMenu.setMnemonic('H');
userHelpItem = new JMenuItem(\"帮助\"); versionItem = new JMenuItem(\"版本\"); helpMenu.add(userHelpItem); helpMenu.add(versionItem); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(helpMenu);
public static void main(String args[]) { EX6 fm = new EX6(); fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
private JMenuBar menuBar;// 主菜单条 private JMenu fileMenu; // 文件菜单 private JMenu editMenu; // 编辑菜单
private JMenu helpMenu; // 系统帮助菜单 private JMenuItem newItem;// 文件新建; private JMenuItem openItem;// 文件打开; private JMenuItem closeItem;// 文件关闭; private JMenuItem exitItem;// 文件退出; private JMenuItem copyItem;// 文件复制; private JMenuItem pasteItem;// 文件粘贴;
}
private JMenuItem searchItem;// 文件查找; private JMenuItem replaceItem;// 文件替换; private JMenuItem locateItem;// 文件定位; private JMenuItem userHelpItem;// 用户帮助; private JMenuItem versionItem;// 版本说明;