Java 绘制图表

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

大家好,我对java很陌生,但是我需要用JApplet绘制一个图。我已经成功地声明了所有变量和类,这个等式正在运行(当自己编译时)。但我得到的只是一条海峡线!谁能告诉我我做错了什么?! 在此小程序中,将要求用户插入abcd的值以及x轴的最小值和最大值

这是我的代码…….任何帮助都将不胜感激:)

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;
    }
}