Java 绘制图表
大家好,我对java很陌生,但是我需要用JApplet绘制一个图。我已经成功地声明了所有变量和类,这个等式正在运行(当自己编译时)。但我得到的只是一条海峡线!谁能告诉我我做错了什么?! 在此小程序中,将要求用户插入abcd的值以及x轴的最小值和最大值 这是我的代码…….任何帮助都将不胜感激:)Java 绘制图表,java,swing,graph,jfreechart,jgrapht,Java,Swing,Graph,Jfreechart,Jgrapht,大家好,我对java很陌生,但是我需要用JApplet绘制一个图。我已经成功地声明了所有变量和类,这个等式正在运行(当自己编译时)。但我得到的只是一条海峡线!谁能告诉我我做错了什么?! 在此小程序中,将要求用户插入abcd的值以及x轴的最小值和最大值 这是我的代码…….任何帮助都将不胜感激:) package CubicEquationSolver; 导入java.awt.*; 导入java.awt.event.ActionEvent; 导入java.awt.event.ActionListen
package CubicEquationSolver;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
导入javax.swing.event.*;
公共类graphApplet扩展JApplet实现ActionListener{
私有静态类g{
公共服务{
}
}
INTA;
int b;
INTC;
int d;
int极小;
int最大值;
int极小值;
int最大值;
int xCoOrdinates[];
国际协调[];
int-y;
//设置标签
JLabel labelA=新的JLabel(“输入A的值”);
JLabel labelB=新的JLabel(“输入B的值”);
JLabel labelC=新的JLabel(“输入C的值”);
JLabel labelD=新的JLabel(“输入D的值”);
JLabel labelMinX=新的JLabel(“最小X值”);
JLabel labelMaxX=新的JLabel(“最大X值”);
JLabel message=新的JLabel(“请插入您的值”);
//将使用JTextField在此处输入值
JTextField textA=新的JTextField();
JTextField textB=新的JTextField();
JTextField textC=新的JTextField();
JTextField textD=新的JTextField();
JTextField minX=新的JTextField();
JTextField maxX=新的JTextField();
JTextField ref=新的JTextField(“输入值0-1”);
//为布局管理器声明布局
JPanel north=新的JPanel();
JPanel南部=新JPanel();
JPanel-west=新的JPanel();
JPanel east=新的JPanel();
JPanel中心=新的JPanel();
//使用JButtons声明按钮
JButton calculate=新JButton(“计算”);
JButton delete=新JButton(“delete”);
JButton refine=新JButton(“refine”);
//从等式类调用
//方程eq=新方程();
私人JPanel小组;
private int width=center.getWidth();
private int height=center.getHeight();
@凌驾
公共void init(){
//setDefaultCloseOperation(关闭时退出);
容器c=this.getContentPane();
这个。设置大小(900480);
此.setVisible(true);
//侦听器到按钮
calculate.addActionListener(这个);
delete.addActionListener(这个);
refine.addActionListener(this);
//用户输入的列表器
textA.addActionListener(this);
textB.addActionListener(这个);
textC.addActionListener(this);
textD.addActionListener(这个);
minX.addActionListener(this);
maxX.addActionListener(这个);
参考addActionListener(本);
//为要区分的面板指定颜色
北面。挫折地面(颜色。浅灰色);
南部。挫折背景(颜色。浅灰色);
西部。挫折背景(颜色。黄色);
东。挫折背景(颜色。绿色);
中间。立根背景(颜色。灰色);
//宣布边界
BorderLayoutBorder=新的BorderLayout();
//设置栅格(x行、y束、空间、空间)
GridLayoutGrid=新的GridLayout(2,8,4,4);
//布局网格
北。设置布局(布局网格);
//设置标签
北加(拉贝拉);
北。添加(labelB);
北。添加(labelC);
北。添加(labelD);
添加(labelMinX);
添加(labelMaxX);
北。添加(参考);
//计算按钮
北。加(算);
//文本框
加上(textA);
添加(textB);
添加(textC);
添加(textD);
添加(minX);
添加(maxX);
添加(细化);
//删除按钮
添加(删除);
添加(消息);
//边界布局
c、 添加(北,BorderLayout.north);
c、 添加(南部,BorderLayout.south);
c、 添加(中心,边框布局。中心);
//c.增加(西,边界布局。西);
//c.添加(东,边界布局。东);
//panel=新的JPanel();
//面板。设置首选尺寸(新尺寸(宽度、高度));
//面板.立根背景(颜色.灰色);
//中心。添加(面板);
}
@凌驾
public void actionPerformed(ActionEvent e)//抛出NumberFormatException
{
//dafault消息将为--“请插入值”
message.setText(例如getActionCommand());
//当按下“删除”按钮时,文本文件中的所有值都将变为
//空的
如果(例如getActionCommand().equals(“删除”)){
消息。设置前景(颜色。深灰色);
textA.setText(空);
textB.setText(空);
textC.setText(空);
textD.setText(空);
minX.setText(null);
maxX.setText(空);
重新油漆();
}else if(例如getActionCommand().equals(“计算”))
//按下“计算”按钮时,值将附加到
//方程式
试一试{
消息。设置前景(颜色。深灰色);
// -------------------------------------------------
a=Integer.parseInt(textA.getText());
b=Integer.parseInt(textB.getText());
c=Integer.parseInt(textC.getText());
d=Integer.parseInt(textD.getText());
minimumX=Integer.parseInt(minX.getText());
maximumX=Integer.parseInt(maxX.getText());
System.out.println(“center.getWidth()”+center.getWidth());
System.out.println(“center.getHeight()”+center.getHeight());
System.out.println(“最小值”+minX.getText());
System.out.println(“m
package CubicEquationSolver;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.*;
public class graphApplet extends JApplet implements ActionListener {
private static class g {
public g() {
}
}
int a;
int b;
int c;
int d;
int minimumX;
int maximumX;
int minimumY;
int maximumY;
int xCoOrdinates[];
int yCoOrdinates[];
int y;
// Setting labels
JLabel labelA = new JLabel("Enter value of A");
JLabel labelB = new JLabel("Enter value of B");
JLabel labelC = new JLabel("Enter value of C");
JLabel labelD = new JLabel("Enter value of D");
JLabel labelMinX = new JLabel("Minimum X value");
JLabel labelMaxX = new JLabel("Maximum X value");
JLabel message = new JLabel("Please insert your values");
// Values will be entered here using JTextField
JTextField textA = new JTextField();
JTextField textB = new JTextField();
JTextField textC = new JTextField();
JTextField textD = new JTextField();
JTextField minX = new JTextField();
JTextField maxX = new JTextField();
JTextField ref = new JTextField("Enter value 0-1");
// declaring the layout for layout manager
JPanel north = new JPanel();
JPanel south = new JPanel();
JPanel west = new JPanel();
JPanel east = new JPanel();
JPanel center = new JPanel();
// declaring buttons using JButtons
JButton calculate = new JButton("Calculate");
JButton delete = new JButton("Delete");
JButton refine = new JButton("Refine");
// Calling from equation class
// equation eq = new equation();
private JPanel panel;
private int width = center.getWidth();
private int height = center.getHeight();
@Override
public void init() {
// setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = this.getContentPane();
this.setSize(900, 480);
this.setVisible(true);
// listener to buttons
calculate.addActionListener(this);
delete.addActionListener(this);
refine.addActionListener(this);
// listeer to user's input
textA.addActionListener(this);
textB.addActionListener(this);
textC.addActionListener(this);
textD.addActionListener(this);
minX.addActionListener(this);
maxX.addActionListener(this);
ref.addActionListener(this);
// assigning colours to panels to be distinguished
north.setBackground(Color.LIGHT_GRAY);
south.setBackground(Color.LIGHT_GRAY);
west.setBackground(Color.YELLOW);
east.setBackground(Color.GREEN);
center.setBackground(Color.GRAY);
// Declaring border
BorderLayout layoutBorder = new BorderLayout();
// setting up the grid (x rows, y clumns, space, space)
GridLayout layoutGrid = new GridLayout(2, 8, 4, 4);
// layout grid
north.setLayout(layoutGrid);
// set labels
north.add(labelA);
north.add(labelB);
north.add(labelC);
north.add(labelD);
north.add(labelMinX);
north.add(labelMaxX);
north.add(ref);
// calculate button
north.add(calculate);
// text boxes
north.add(textA);
north.add(textB);
north.add(textC);
north.add(textD);
north.add(minX);
north.add(maxX);
north.add(refine);
// delete button
north.add(delete);
south.add(message);
// border layout
c.add(north, BorderLayout.NORTH);
c.add(south, BorderLayout.SOUTH);
c.add(center, BorderLayout.CENTER);
// c .add(west, BorderLayout.WEST);
// c .add(east, BorderLayout.EAST);
// panel = new JPanel();
// panel.setPreferredSize(new Dimension(width, height));
// panel.setBackground(Color.GRAY);
// center.add(panel);
}
@Override
public void actionPerformed(ActionEvent e) // throws NumberFormatException
{
// dafault message will be <message> -- "Please insert values"
message.setText(e.getActionCommand());
// when button "Delete" is pressed all values in text firlds will turn
// null
if (e.getActionCommand().equals("Delete")) {
message.setForeground(Color.DARK_GRAY);
textA.setText(null);
textB.setText(null);
textC.setText(null);
textD.setText(null);
minX.setText(null);
maxX.setText(null);
repaint();
} else if (e.getActionCommand().equals("Calculate"))
// when "Calculate" button is pressed, values will be attached to
// equation
try {
message.setForeground(Color.DARK_GRAY);
// -------------------------------------------------
a = Integer.parseInt(textA.getText());
b = Integer.parseInt(textB.getText());
c = Integer.parseInt(textC.getText());
d = Integer.parseInt(textD.getText());
minimumX = Integer.parseInt(minX.getText());
maximumX = Integer.parseInt(maxX.getText());
System.out.println("center.getWidth() " + center.getWidth());
System.out.println("center.getHeight() " + center.getHeight());
System.out.println("minimum " + minX.getText());
System.out.println("maximum " + maxX.getText());
System.out.println("a " + textA.getText());
System.out.println("b " + textB.getText());
System.out.println("c " + textC.getText());
System.out.println("d " + textD.getText());
// ------------------------------------------------------
message.setText("This is the result for " + "A "
+ textA.getText() + ", B " + textB.getText() + ", C "
+ textC.getText() + ", D " + textD.getText());
draw();
}
catch (NumberFormatException ex)
// if user inputs other than numbers, a warning message in the south
// panel will show
{
message.setText("Please insert numerical value in "
+ ex.getMessage());
message.setForeground(Color.red);
message.setFont(new Font("Tahoma", Font.BOLD, 12));
}
else if (e.getActionCommand().equals("Refine")) {
// for refine
}
}
// ===================================================================================
private void calculation() {
xCoOrdinates = new int[(maximumX - minimumX) + 1];
yCoOrdinates = new int[(maximumX - minimumX) + 1];
for (int i = 0; i < xCoOrdinates.length; i++)
// for(int j = 0; j < yCoOrdinates.length; j++)
{
// generating the x co-ordinates and storing them in arrays
xCoOrdinates[i] = minimumX + i;
// generating the y co-ordinates using the formula given
y = ((a * (int) Math.pow(i, 3)) + (b * (int) Math.pow(i, 2))
+ (c * i) + (d));
// storing y co-ordinates
yCoOrdinates[i] = y;
// displaying results
// System.out.println("X = " + i + " Y = " + getY());
System.out.println("These are the values of X = " + i);
}
// printing the y axes values
for (int i = 0; i < yCoOrdinates.length; i++) {
System.out.println("this is the extracted Y " + yCoOrdinates[i]);
}
maximumX = xCoOrdinates[0];
maximumX = xCoOrdinates[0];
for (int i = 1; i < yCoOrdinates.length; i++) {
if (yCoOrdinates[i] > maximumX)
maximumX = xCoOrdinates[i];
else if (yCoOrdinates[i] < minimumX)
minimumX = xCoOrdinates[i];
}
System.out.println("MAXX is " + maximumX);
System.out.println("MINX is " + minimumX);
maximumY = yCoOrdinates[0];
minimumY = yCoOrdinates[0];
for (int i = 1; i < yCoOrdinates.length; i++) {
if (yCoOrdinates[i] > maximumY)
maximumY = yCoOrdinates[i];
else if (yCoOrdinates[i] < minimumY)
minimumY = yCoOrdinates[i];
}
System.out.println("MAXY is " + maximumY);
System.out.println("MINY is " + minimumY);
}
// =================================================================================================
public void draw() {
Graphics g = center.getGraphics();
g.setColor(Color.GRAY);
g.fillRect(0, 0, center.getWidth(), center.getHeight());
// g.fillRect(25,25, center.getWidth()-50, center.getHeight()-50);
double x, y, nextX, nextY;
int xPoint; // = 0;
int yPoint; // = 0;
int nextXpoint; // = 0;
int nextYpoint; // = 0;
g.setColor(Color.BLUE);
for (xPoint = 0; xPoint <= (double) center.getWidth(); xPoint++) {
x = scaleX(xPoint);
y = equation(x);
yPoint = scaleY(y);
nextXpoint = xPoint + 1;
nextX = scaleX(nextXpoint);
nextY = equation(nextX);
nextYpoint = scaleY(nextY);
g.drawLine(xPoint, yPoint, nextXpoint, nextYpoint);
// System.out.println("equation --->" + eq.getY());
}
}
private double equation(double x) {
return y;
// return a*x*x*x + b*x*x + c*x + d;
}
private double scaleX(int xPoint) {
int minXstart = minimumX;
int maxXend = maximumX;
double xScale = (double) center.getWidth() / (maxXend - minXstart);
return (xPoint - (center.getWidth() / 2)) / xScale;
}
private int scaleY(double y) {
int minYstart = minimumY;
int maxYend = maximumY;
int yCoord;
double yScale = (double) center.getHeight() / (maxYend - minYstart);
yCoord = (int) (-y * yScale) + (int) (center.getHeight() / 2);
return yCoord;
}
}