/*
*一元二次方程解的小程序
*
*想到哪里写到哪里,还未进行代码的优化!初学java肯定有很多问题! =。=!
*
*已经考虑到很多情况的可能。肯定还存在很多BUG。。。。待测试修改!!
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.Math;
public class MyEquation extends JFrame implements ActionListener{
private double a;
private double b;
private double c;
private double delta;
private JPanel jp = new JPanel();
private JMenu[] jmArray = {new JMenu("文件"),new JMenu("帮助")};
private JMenuItem jmiwenjian = new JMenuItem("退出");
private JMenuItem jmihelp = new JMenuItem("关于");
private JMenuBar jmb = new JMenuBar();
private JLabel[] signArray = {new JLabel("方程赋值:"),new JLabel("运算形式:"),new JLabel("操作栏:"),new JLabel("运算显示栏:")};
private JTextField[] jteArray = {new JTextField(2),new JTextField(2),new JTextField(2)};
private JLabel[] jlbArray = {new JLabel("X^2+"),new JLabel("X+"),new JLabel("=0")};
private JRadioButton[] jraArray = {new JRadioButton("保留根号"),new JRadioButton("保留小数")};
private JButton[] butArray = {new JButton("计算"),new JButton("重置")};
private ButtonGroup bg = new ButtonGroup();
private JTextArea result=new JTextArea(20,60);
private JLabel textState = new JLabel("状态备注: 当前方程未赋值系数!");
//界面布局
public MyEquation() {
jp.setLayout(null);
jmb.add(jmArray[0]);
jmb.add(jmArray[1]);
jmArray[0].add(jmiwenjian);
jmiwenjian.addActionListener(this);
jmArray[1].add(jmihelp);
jmihelp.addActionListener(this);
this.setJMenuBar(jmb);
for(int i=0;i<3;i++)
{
jteArray[i].setBounds(40+i*70,50,30,30);
jlbArray[i].setBounds(80+i*70,50,30,30);
jp.add(jteArray[i]);
jp.add(jlbArray[i]);
jteArray[i].addActionListener(this);//赋值框监听
if(i<2)
{
jraArray[i].setBounds(40+i*120,125,90,30);
bg.add(jraArray[i]);
if(i>1) continue;
butArray[i].setBounds(40+i*130,200,80,40);
jp.add(jraArray[i]);
jp.add(butArray[i]);
jraArray[i].addActionListener(this);//保留根号,保留小数监听
butArray[i].addActionListener(this);//计算按钮,重置按钮监听
}
signArray[i].setBounds(10,20+i*70,80,30);
jp.add(signArray[i]);
}
signArray[3].setBounds(300,20,70,30);
result.setBounds(300,50,200,200);
result.setEditable(false);
jp.add(result);
jp.add(signArray[3]);
jp.setBorder(new TitledBorder("控制栏目"));
this.add(jp);
this.add(textState,BorderLayout.SOUTH);
this.setTitle("一元二次方程的解");
this.setBounds(300,300,550,350);
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//实现几个功能的监听,以及判断,按钮的控制
//if写了很多,考虑到很多种情况的可能,写得乱七八糟的!! =。=!!
public void actionPerformed(ActionEvent e)
{
StringBuffer temp=new StringBuffer("△= b^2-4ac");
StringBuffer temp1=new StringBuffer("");
//菜单选项 1.退出 2.关于
if(e.getSource()==jmiwenjian)
{System.exit(0);}
if(e.getSource()==jmihelp)
{JOptionPane.showMessageDialog (null," 抄袭无罪,懒人万岁 ","关于",JOptionPane.WARNING_MESSAGE);}
//重置键的功能,3个赋值框置空
if(e.getSource()==butArray[1])
{
for(int j=0;j<3;j++)
{
jteArray[j].setText("");
}
}
//计算功能按钮
if(e.getSource()==butArray[0])
{
//判断赋值框是否为空
if(jteArray[0].getText().equals("")|jteArray[1].getText().equals("")|jteArray[2].getText().equals(""))
{
JOptionPane.showMessageDialog (null,"傻瓜,没系数叫我怎么算啊!","警告",JOptionPane.WARNING_MESSAGE);
}
a=Double.parseDouble(jteArray[0].getText());
b=Double.parseDouble(jteArray[1].getText());
c=Double.parseDouble(jteArray[2].getText());
delta=Math.pow(b,2)-4*a*c;
double x1=(-b+Math.sqrt(delta))/2*a;
double x2=(-b-Math.sqrt(delta))/2*a;
//底层状态赋值栏
getresult((int)a,(int)b,(int)c);
//运算类型是否有选择
if(!jraArray[0].isSelected()&&!jraArray[1].isSelected()){
JOptionPane.showMessageDialog (null,"请选择运算类型!","警告",JOptionPane.WARNING_MESSAGE);
}
//保留小数
if(!jraArray[0].isSelected()&&jraArray[1].isSelected())
{