⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exercise22_4.java

📁 java程序设计导论(daniel liang著) 所有偶数课后习题答案
💻 JAVA
字号:
// Exercise22_4.java: Use CardLayoutimport java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class Exercise22_4 extends JApplet implements ActionListener {  private CardLayout queue = new CardLayout();  private JPanel cardPanel = new JPanel();  private JMenuItem jmiInt, jmiRat, jmiClose;  private JComboBox jcboIntRational = new JComboBox(new Object[]{    "Integer Operation", "Rational Operation"});    public Exercise22_4() {    // Create JMenuBar jmb    JMenuBar jmb = new JMenuBar();    //add a menu "Operation" in jmb    JMenu operationMenu = new JMenu("Operation", false);    jmb.add(operationMenu);    //add a menu "Exit" in jmb    JMenu exitMenu = new JMenu("Exit", true);    jmb.add(exitMenu);    //add JMenuItems    operationMenu.add(jmiInt = new JMenuItem("Integer"));    operationMenu.add(jmiRat = new JMenuItem("Rational"));    exitMenu.add(jmiClose = new JMenuItem("Close"));    //create intPanel for integer arithmetic    JPanel intPanel = new IntPanel();    //create rationalPanel for rational arithmetic    JPanel rationalPanel = new RationalPanel();    cardPanel.setLayout(queue);    cardPanel.add(intPanel, "Integer");    cardPanel.add(rationalPanel, "Rational");    //set FlowLayout in the frame    getContentPane().setLayout(new BorderLayout());    getContentPane().add(jcboIntRational, BorderLayout.NORTH);    getContentPane().add(cardPanel, BorderLayout.CENTER);    jcboIntRational.addActionListener(this);  }  //handling menu selection  public void actionPerformed(ActionEvent e) {    if (jcboIntRational.getSelectedItem().equals("Integer Operation"))      queue.first(cardPanel);    else if (jcboIntRational.getSelectedItem().equals("Rational Operation"))      queue.last(cardPanel);  }  public static void main(String[] args) {    Exercise22_4 applet = new Exercise22_4();    JFrame frame = new JFrame();    //EXIT_ON_CLOSE == 3    frame.setDefaultCloseOperation(3);    frame.setTitle("Exercise22_4");    frame.getContentPane().add(applet, BorderLayout.CENTER);    applet.init();    applet.start();    frame.setSize(400,320);    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();    frame.setLocation((d.width - frame.getSize().width) / 2,      (d.height - frame.getSize().height) / 2);    frame.setVisible(true);  }}class IntPanel extends CalculationPanel {  IntPanel() {    super("Integer Calculation");  }  void add() {    int result = getNum1() + getNum2();    //set result in JTextField tf3    tfResult.setText(String.valueOf(result));  }  void subtract() {    int result = getNum1() - getNum2();    //set result in JTextField tf3    tfResult.setText(String.valueOf(result));  }  void multiply() {    int result = getNum1() * getNum2();    //set result in JTextField tfResult    tfResult.setText(String.valueOf(result));  }  void divide() {    int result = getNum1() / getNum2();    //set result in JTextField tfResult    tfResult.setText(String.valueOf(result));  }  private int getNum1() {    //use trim() to trim eztraneous space in the text field    int num1 = Integer.parseInt(tfNum1.getText().trim());    return num1;  }  private int getNum2() {    //use trim() to trim eztraneous space in the text field    int num2 = Integer.parseInt(tfNum2.getText().trim());    return num2;  }}class RationalPanel extends CalculationPanel {  RationalPanel() {    super("Rational Calculation");  }  void add() {    Rational num1 = getNum1();    Rational num2 = getNum2();    Rational result = num1.add(num2);    //set result in JTextField tfResult    tfResult.setText(result.toString());  }  void subtract() {    Rational num1 = getNum1();    Rational num2 = getNum2();    Rational result = num1.subtract(num2);    //set result in JTextField tfResult    tfResult.setText(result.toString());  }  void multiply() {    Rational num1 = getNum1();    Rational num2 = getNum2();    Rational result = num1.multiply(num2);    //set result in JTextField tfResult    tfResult.setText(result.toString());  }  void divide() {    Rational num1 = getNum1();    Rational num2 = getNum2();    Rational result = num1.divide(num2);    //set result in JTextField tfResult    tfResult.setText(result.toString());  }  Rational getNum1() {    StringTokenizer st1 = new      StringTokenizer(tfNum1.getText().trim(), "/");    int numer1 = Integer.parseInt(st1.nextToken());    int denom1 = Integer.parseInt(st1.nextToken());    return new Rational(numer1,denom1);  }  Rational getNum2() {    StringTokenizer st2 = new      StringTokenizer(tfNum2.getText().trim(), "/");    int numer2 = Integer.parseInt(st2.nextToken());    int denom2 = Integer.parseInt(st2.nextToken());    return new Rational(numer2,denom2);  }}/*design a generic calculation user interface for int and  rational arithmetic*/abstract class CalculationPanel extends JPanel  implements ActionListener {  private JPanel p0 = new JPanel();  private JPanel p1 = new JPanel();  private JPanel p2 = new JPanel();  JTextField tfNum1, tfNum2, tfResult;  private JButton jbtAdd, jbtSub, jbtMul, jbtDiv;  public CalculationPanel(String title) {    p0.add(new JLabel(title));    //add labels and text fields    p1.setLayout(new FlowLayout());    p1.add(new JLabel("Number 1"));    p1.add(tfNum1 = new JTextField(" ", 3));    p1.add(new JLabel("Number 2"));    p1.add(tfNum2 = new JTextField(" ", 3));    p1.add(new JLabel("Result"));    p1.add(tfResult = new JTextField(" ", 4));    tfResult.setEditable(false);    //set FlowLayout for p2    JPanel p2 = new JPanel();    p2.setLayout(new FlowLayout());    p2.add(jbtAdd = new JButton("Add"));    p2.add(jbtSub = new JButton("Subtract"));    p2.add(jbtMul = new JButton("Multiply"));    p2.add(jbtDiv = new JButton("Divide"));    //add panels into CalculationPanel    setLayout(new BorderLayout());    add("North",p0);    add("Center",p1);    add("South",p2);    //register listener for source objects    jbtAdd.addActionListener(this);    jbtSub.addActionListener(this);    jbtMul.addActionListener(this);    jbtDiv.addActionListener(this);  }  public void actionPerformed(ActionEvent e) {    String actionCommand = e.getActionCommand();    if (e.getSource() instanceof JButton) {      if ("Add".equals(actionCommand))        add();      else if ("Subtract".equals(actionCommand))        subtract();      else if ("Multiply".equals(actionCommand))        multiply();      else if ("Divide".equals(actionCommand))        divide();    }  }  abstract void add();  abstract void subtract();  abstract void multiply();  abstract void divide();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -