JFrame 解决一元二次函数

import javax.swing.JFrame 对输入的一元二次函数的系数,进行求解,并画图。

在这里插入图片描述

1、计算界面

package yan;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class EquationFrame extends JFrame {
	String a, b, c, x, y;
	JTextArea textArea;
	JTextField text1, text2, text3;
	Button button;
	Label la1, la2, la3;
	public EquationFrame(String s) {
		super(s);
		JPanel left = new JPanel();//左侧面板
		JPanel left1 = new JPanel();//数据框及按钮加载面板
		JPanel left2 = new JPanel();//文本域加载面板

		text1 = new JTextField(2);
		text2 = new JTextField(2);
		text3 = new JTextField(2);
		text1.setHorizontalAlignment(JTextField.RIGHT);//文本框居右
		text2.setHorizontalAlignment(JTextField.RIGHT);
		text3.setHorizontalAlignment(JTextField.RIGHT);
		textArea = new JTextArea(5, 20);
		textArea.setEditable(false);//文本域不可编辑

		button = new Button("确定");
		button.setBackground(Color.cyan);
		la1 = new Label("x^2 +");
		la2 = new Label(" x +");
		la3 = new Label("= 0");
		
		left1.add(text1);
		left1.add(la1);
		left1.add(text2);
		left1.add(la2);
		left1.add(text3);
		left1.add(la3);
		left1.add(button);
		left2.add(textArea);
		left.add(left1, BorderLayout.NORTH);
		left.add(left2,BorderLayout.SOUTH);
		left.setPreferredSize(new Dimension(300, 250));//设置文本面板大小
		this.add(left, BorderLayout.WEST);
		button.addActionListener(new ActionListener() {
			//按钮操作
			@Override
			public void actionPerformed(ActionEvent e) {
				if (e.getSource() == button) {
					a = text1.getText();
					b = text2.getText();
					c = text3.getText();
					new X2FunctionPanel(Double.parseDouble(a), Double.parseDouble(b), Double.parseDouble(c));
					textArea.setText(
							(String.valueOf(jisuan(Integer.parseInt(a), Integer.parseInt(b), Integer.parseInt(c)))));
					add(new X2FunctionPanel());//加载做图面板
					setVisible(true);
				}
			}
		});
		setBounds(100, 100, 700, 300);
		setVisible(true);

	}

	public static String jisuan(int a, int b, int c) {
		double x;
		double y;
		if (b * b - 4 * a * c < 0) {
			return "没有实根,函数无解";
		} else {
			x = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
			y = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);
			new X2FunctionPanel(x, y);
			return "函数有解且函数的解是\n" + "x = " + x + "\n" + "y = " + y;

		}
	}

	public static void main(String[] args) {
		new EquationFrame("一元二次函数");
	}
}


2、画图面板

package yan;

import java.awt.Graphics;
import java.awt.Polygon;

import javax.swing.JPanel;

public class X2FunctionPanel extends JPanel {

	static double X, Y;//定点坐标,X可做对称轴
	static double S;//与X轴相交两点的距离,及抛物线开口大小

	public X2FunctionPanel() {
	}

	public X2FunctionPanel(double x, double y) {
		x = Math.abs(x);
		y = Math.abs(y);
		if (x > y) {
			S = (x - y) / 100;
		} else if (y > x) {
			S = (y - x) / 100;
		} else {
			S = 0.05;//无根默认取值
		}

	}

	public X2FunctionPanel(double a, double b, double c) {
		X = -b / (2 * a);
		Y = (4 * a * c - b * b) / (4 * a);
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		// 画x轴
		g.drawLine(20, 150, getWidth() - 20, 150);
		// x箭头
		g.drawLine(getWidth() - 30, 140, getWidth() - 20, 150);
		g.drawLine(getWidth() - 30, 160, getWidth() - 20, 150);
		// “x”
		g.drawString("x", getWidth() - 10, 150);

		// 画y轴
		g.drawLine(200, getHeight() - 20, 200, 20);
		g.drawLine(190, 30, 200, 20);
		g.drawLine(210, 30, 200, 20);
		g.drawString("y", 220, 30);

		// 画函数图像
		Polygon p = new Polygon();

		for (int x = -300; x <= 300; x++) {
			p.addPoint(x + 200 + (int) X, 150 - (int) Y - (int) (S * x * x));
		}
		g.drawPolyline(p.xpoints, p.ypoints, p.npoints);
	}
}

在这里插入图片描述
在这里插入图片描述
画图面板有参考他人代码。可直接百度搜索,java 画一元二次函数图,查找。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值