Java desktop application for computing the roots of a quadratic equation – Source codes
Source codes of a Java desktop application for solving a quadratic equation is shown below. The application is written based on this Java codes for computing roots of the equation.
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.lang.Math; import java.awt.font.TextAttribute; import java.text.AttributedString; public class QuadCalc implements ActionListener{ JFrame frame; MyPanel panel; JTextArea textArea; JLabel aLabel, bLabel, cLabel; JTextField aBox,bBox,cBox; JButton[] functionButtons = new JButton[2]; JButton submitButton, clearButton; JPanel labelPane; Font myFont = new Font("Arial",Font.BOLD,18); Font myFont2 = new Font("Arial",Font.PLAIN,14); Color myColor = new Color(240,250,255); double a=0,b=0,c=0,x=0,x1=0,x2=0; String prnText = ""; String s; QuadCalc(){ frame = new JFrame("Quadratic Equation Solver"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(420, 550); frame.setLayout(null); frame.setLocationRelativeTo(null); panel = new MyPanel(); textArea = new JTextArea(); textArea.setBounds(50, 300, 300, 100); textArea.setFont(myFont2); textArea.setEditable(false); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); aLabel = new JLabel("a: ",JLabel.RIGHT); aLabel.setFont(new Font("Verdana", Font.BOLD, 18)); aBox = new JTextField(); aBox.setBounds(100, 150, 50, 50); aBox.setBackground(new Color(240,250,255)); aBox.setFont(myFont); aBox.setEditable(true); aBox.addActionListener(this); bLabel = new JLabel("b: ",JLabel.RIGHT); bLabel.setFont(new Font("Verdana", Font.BOLD, 18)); bBox = new JTextField(); bBox.setBounds(200, 150, 50, 50); bBox.setBackground(myColor); bBox.setFont(myFont); bBox.setEditable(true); bBox.addActionListener(this); cLabel = new JLabel("c: ",JLabel.RIGHT); cLabel.setFont(new Font("Verdana", Font.BOLD, 18)); cBox = new JTextField(); cBox.setBounds(300, 150, 50, 50); cBox.setBackground(myColor); cBox.setFont(myFont); cBox.setEditable(true); cBox.addActionListener(this); //Lay out the labels and text boxes in a panel. labelPane = new JPanel(); labelPane.setBounds(50,150,300,50); labelPane.setLayout(new GridLayout(1,6)); labelPane.add(aLabel); labelPane.add(aBox); labelPane.add(bLabel); labelPane.add(bBox); labelPane.add(cLabel); labelPane.add(cBox); submitButton = new JButton("Submit"); submitButton.setBounds(50,225,100,50); clearButton = new JButton("Clear"); clearButton.setBounds(50,430,100,50); functionButtons[0] = submitButton; functionButtons[1] = clearButton; for(int i =0;i<2;i++) { functionButtons[i].addActionListener(this); functionButtons[i].setFont(myFont); functionButtons[i].setFocusable(false); } frame.add(submitButton); frame.add(clearButton); frame.add(labelPane); frame.add(textArea); frame.add(panel); frame.setVisible(true); } public static void main(String[] args) { QuadCalc calc = new QuadCalc(); } class MyPanel extends JPanel{ MyPanel(){ this.setBounds(25,25,325,150); } public void paint(Graphics g) { Graphics2D g2D = (Graphics2D) g; String prnText1 = "A quadratic equation has a form of"; String prnText2 = "aX2 + bX + c = 0"; String prnText3 = "To solve your equation, enter values"; String prnText4 = "of a, b, c into the boxes:"; // superscript AttributedString supText = new AttributedString(prnText2); supText.addAttribute(TextAttribute.SIZE, 18, 0, 16); supText.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 2, 3); g2D.setPaint(Color.BLUE); g2D.setFont(new Font("Dialog",Font.PLAIN,18)); g2D.drawString(prnText1,25,25); g2D.drawString(supText.getIterator(), 25, 50); g2D.drawString(prnText3,25,75); g2D.drawString(prnText4,25,100); } } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==submitButton) { a=Double.parseDouble(aBox.getText()); b=Double.parseDouble(bBox.getText()); c=Double.parseDouble(cBox.getText()); if (a == 0.0) { if (b == 0.0) { if (c != 0) { prnText = "The equation has no solutions"; } else { prnText = "The equation has infinite solutions"; } } else { x = -c/b; s = String.format("%.2f",x); prnText = "The equation is linear and has one root:\nX = ".concat(s); } } else { double delta = b*b - 4*a*c; if (delta == 0.0) { x = -b/(2*a); s = String.format("%.2f",x); prnText="The equation has one unique root: \nX = ".concat(s); } else if (delta > 0.0) { double x1 = (-b - Math.sqrt(delta))/(2*a); double x2 = (-b + Math.sqrt(delta))/(2*a); s = String.format("%.2f",x1); prnText="The equation has two roots: \n"+"X1 = ".concat(s); prnText += ",\n"+ "X2 = "+String.format("%.2f",x2); } else if (delta < 0.0) { double realx = -b/(2*a); double imx = (Math.sqrt(Math.abs(delta)))/(2*a); prnText="The equation has two conjugate complex roots\n"; prnText += "X1 = "+String.format("%.2f",realx)+" - i("+String.format("%.2f",Math.abs(imx))+"), \n"; prnText += "X2 = "+String.format("%.2f",realx)+" + i("+String.format("%.2f",Math.abs(imx))+")"; } } textArea.setText(prnText); } if(e.getSource()==clearButton) { textArea.setText(""); aBox.setText(""); bBox.setText(""); cBox.setText(""); } } }