2012-07-15 5 views
0

안녕하세요, 저는 JApplet에서 그래프를 그릴 필요가 있습니다. 나는 모든 변수와 클래스를 선언 할 수 있었고, 방정식은 작동 중이다 (컴파일되었을 때). 그러나 내가 얻는 누구나는 해협 선 이어도! 누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있니? 이에 는 사용자가 x가 어떤 도움이 감사 감사합니다 :)그래프를 그릴

을 ....... 여기

내 코드 축에 대한 ABCD의 값과 최소값과 최대 값을 삽입하라는 메시지가 나타납니다 애플릿
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; 
    } 
} 

답변

3

이러한 유형의 작업을 수행 할 타사 라이브러리가 있습니다. 체크 아웃 :

JFreeChart

Charts4J

3

단기 도움말을 : 당신의 출력을 확인, 예상대로 x와 y의 값 달라합니까? 그들은 실제로 플로팅하는 동안 사용됩니까? 디버거를 사용하여 코드를 단계별로 실행하십시오. 그런 다음보다 집중된 질문으로 다시 돌아옵니다.

(다음 이틀 이내)

중간 용어 다음 두 권의 책을 사서 읽어 보시기 바랍니다 :

http://www.amazon.com/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&ie=UTF8&qid=1342369060&sr=1-1&keywords=clean+code

클래스만큼 당신이 게시 한 허용되지 않습니다으로하고, 쓸데없는 부분을 이해하는 것을 불가능하게 만듭니다. 이것이 제가 추측 한 하향 투표를받은 이유입니다.

3

저는 JFreeChart 팬이지만, Java 2D에서 데카르트 좌표를 사용하여 그래프를 플롯 할 수도 있습니다 (here).

관련 문제