//package Spring02.PS8; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class PolyFrame extends JFrame implements ActionListener { JButton quitButton; JLabel poly0; //display poly0 JLabel poly1; //display poly1 //Components to add terms to polys JButton addTermPoly0; JButton addTermPoly1; JTextField coefText; JTextField degreeText; //Components to add two polynomials JButton addButton1; JButton addButton2; //Components to multiply polys by a scalar JButton multScalarButton; JComboBox multScalarCombo; JTextField sfield; //hold the multiplier scalar //Components to multiply two polys JButton multButton; JLabel mlabel; //hold result of multiplication //Components for evaluating polynomials JButton evalButton; JComboBox evalCombo; //combobox to give choice of "poly0" "poly1" JTextField xfield; //hold x value JLabel elabel; //display eval result //Components to get first derivative of polys JButton diffButton; JComboBox diffCombo; JLabel dlabel; //hold resulting derivative private Polynomial p[]; //array for poly0 and poly1 public PolyFrame(){ Container c = getContentPane(); c.setLayout(new GridLayout(6,1,0,30)); //String text; String [] polychoice = {"Poly0", "Poly1"}; p = new Polynomial[2]; p[0] = new Polynomial(); p[1] = new Polynomial(); //Create panel to add terms to poly0 and poly1 JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(2,1,0,10)); JPanel addTermPanel1 = new JPanel(); JPanel addTermPanel2 = new JPanel(); addTermPanel1.setLayout(new GridLayout(1,4)); addTermPanel2.setLayout(new GridLayout(1,2)); addTermPoly0 = new JButton("Add Term to Poly0"); addTermPoly1 = new JButton("Add Term to Poly1"); addTermPoly0.addActionListener(this); addTermPoly1.addActionListener(this); coefText = new JTextField(6); degreeText = new JTextField(6); addTermPanel1.add(new JLabel(" Enter Coefficient:")); addTermPanel1.add(coefText); addTermPanel1.add(new JLabel(" Enter Degree:")); addTermPanel1.add(degreeText); addTermPanel2.add(addTermPoly0); addTermPanel2.add(addTermPoly1); panel1.add(addTermPanel1); panel1.add(addTermPanel2); c.add(panel1); //create panel to hold label and poly0 and poly1 JPanel panel2 = new JPanel(); panel2.setLayout(new GridLayout(2,1,0,10)); JPanel polyPanel1 = new JPanel(); JPanel polyPanel2 = new JPanel(); polyPanel1.setLayout(new BorderLayout()); polyPanel2.setLayout(new BorderLayout()); poly0 = new JLabel(); poly1 = new JLabel(); //panel2.setLayout(new GridLayout(2,1)); polyPanel1.add(new JLabel(" Poly0: "), BorderLayout.WEST); polyPanel1.add(poly0, BorderLayout.CENTER); polyPanel2.add(new JLabel(" Poly1: "), BorderLayout.WEST); polyPanel2.add(poly1, BorderLayout.CENTER); panel2.add(polyPanel1); panel2.add(polyPanel2); c.add(panel2); //Create Panel to multiply poly by scalar JPanel panel3 = new JPanel(); panel3.setLayout(new GridLayout(2,1,0,10)); JPanel multScalarPanel = new JPanel(); multScalarPanel.setLayout(new GridLayout(1,5,5,0)); multScalarPanel.add(new JLabel(" Multiply")); multScalarCombo = new JComboBox(polychoice); multScalarPanel.add(multScalarCombo); multScalarPanel.add(new JLabel("by Scalar: ", SwingConstants.RIGHT)); sfield = new JTextField(6); multScalarPanel.add(sfield); multScalarButton = new JButton("MULTIPLY!"); multScalarPanel.add(multScalarButton); multScalarButton.addActionListener(this); //create panel to do "Add" poly0 and poly1 JPanel addPanel = new JPanel(); addPanel.setLayout(new GridLayout(1,2)); addButton1 = new JButton("ADD Poly0 to Poly1"); addButton2 = new JButton("ADD Poly1 to Poly0"); addPanel.add(addButton1); addPanel.add(addButton2); addButton1.addActionListener(this); addButton2.addActionListener(this); panel3.add(multScalarPanel); panel3.add(addPanel); c.add(panel3); //create panel to multiply two polys JPanel panel4 = new JPanel(); panel4.setLayout(new GridLayout(2,1,0,10)); JPanel multPanel1 = new JPanel(); multPanel1.setLayout(new GridLayout(1,1)); multButton = new JButton("MULTIPLY Poly0 and Poly1"); multButton.addActionListener(this); multPanel1.add(multButton); JPanel multPanel2 = new JPanel(); multPanel2.setLayout(new BorderLayout()); mlabel = new JLabel(); multPanel2.add(new JLabel(" Result:"), BorderLayout.WEST); multPanel2.add(mlabel, BorderLayout.CENTER); panel4.add(multPanel1); panel4.add(multPanel2); c.add(panel4); //Create Panel to differentiate JPanel panel5 = new JPanel(); panel5.setLayout(new GridLayout(2,1,0,10)); JPanel diffPanel1 = new JPanel(); diffPanel1.setLayout(new GridLayout(1,2)); diffCombo = new JComboBox(polychoice); diffButton = new JButton("DIFFERENTIATE!"); diffButton.addActionListener(this); diffPanel1.add(diffButton); diffPanel1.add(diffCombo); JPanel diffPanel2 = new JPanel(); diffPanel2.setLayout(new BorderLayout()); diffPanel2.add(new JLabel(" Derivative:"), BorderLayout.WEST); dlabel = new JLabel(); diffPanel2.add(dlabel, BorderLayout.CENTER); panel5.add(diffPanel1); panel5.add(diffPanel2); c.add(panel5); //create panel to do Evaluate JPanel panel6 = new JPanel(); panel6.setLayout(new GridLayout(2,1,0,10)); JPanel evaluatePanel = new JPanel(); evaluatePanel.setLayout(new GridLayout(1,5,5,0)); evalButton = new JButton("EVALUATE!"); evalButton.addActionListener(this); evalCombo = new JComboBox(polychoice); xfield = new JTextField(6); evaluatePanel.add(new JLabel(" Evaluate")); evaluatePanel.add(evalCombo); evaluatePanel.add(new JLabel(" Enter x: ",SwingConstants.RIGHT )); evaluatePanel.add(xfield); evaluatePanel.add(evalButton); //the last panel holds the eval result and the quit button JPanel lastPanel = new JPanel(); lastPanel.setLayout(new GridLayout(1,3)); elabel = new JLabel(); quitButton = new JButton("QUIT"); quitButton.addActionListener(this); lastPanel.add(new JLabel(" Eval Result:")); lastPanel.add(elabel); lastPanel.add(quitButton); panel6.add(evaluatePanel); panel6.add(lastPanel); c.add(panel6); } public void actionPerformed(ActionEvent e){ if (e.getSource() == addTermPoly0 || e.getSource()==addTermPoly1){ String s = coefText.getText(); double c = Double.parseDouble(s); s = degreeText.getText(); int d = Integer.parseInt(s); if (e.getSource() == addTermPoly0){ p[0].addTerm(d,c); updatePolyLabel(0); } else { p[1].addTerm(d,c); updatePolyLabel(1); } } else if (e.getSource() == addButton1){ p[1].addPoly(p[0]); updatePolyLabel(1); } else if (e.getSource() == addButton2) { p[0].addPoly(p[1]); updatePolyLabel(0); } else if (e.getSource() == multScalarButton){ int i = multScalarCombo.getSelectedIndex(); String s = sfield.getText(); double d = Double.parseDouble(s); p[i].multScalar(d); updatePolyLabel(i); } else if (e.getSource() == multButton){ Polynomial result = Polynomial.multPoly(p[0], p[1]); mlabel.setText(result.getPoly()); } else if (e.getSource() == diffButton){ int i = diffCombo.getSelectedIndex(); Polynomial result = Polynomial.derivPoly(p[i]); dlabel.setText(result.getPoly()); } else if (e.getSource() == evalButton){ int i = evalCombo.getSelectedIndex(); double x = Double.parseDouble(xfield.getText()); double result = p[i].evalPoly(x); elabel.setText(""+result); } else if (e.getSource() == quitButton){ System.exit(0); } } private void updatePolyLabel(int index){ if (index==0) poly0.setText(p[0].getPoly()); else poly1.setText(p[1].getPoly()); } public static void main(String args[]) { PolyFrame frame = new PolyFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.show(); } }