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 画一元二次函数图,查找。