Drawing the Quadratic formula with sliders on a JPanel

前端 未结 3 1421
不思量自难忘°
不思量自难忘° 2021-01-23 00:20

So, I\'m trying to make a program where you can input the quadratic formula (ax^2+bx+c) via sliders. Then it draws a graph as you adjust for A, B, and C.

Issues:

<
3条回答
  •  滥情空心
    2021-01-23 00:52

    I modified the code so that it solves for x given a b and c. Then plugs x back in and solves for y. I'm still not getting it to draw though. I also took out the loop since the sliders are setting the a b and c values which lead to x. Anyone know why it won't draw?

    package quadraticslider;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class quadraticslider
    {
    
         public static void main (String[] args)
       {
          JFrame frame = new JFrame ("Quadratic Slider");
          frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    
          frame.getContentPane().add(new quadraticpanel());
    
          frame.pack();
          frame.setVisible(true);
       }
    }
    

    package quadraticslider;

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    
    public class quadraticpanel extends JPanel
    {
       private JPanel controls, graphPanel;
       private JSlider ASlider, BSlider, CSlider;
       private JLabel ALabel, BLabel, CLabel;
       double A, B, C, x,Y;
    
    
       public quadraticpanel()
       {
          ASlider = new JSlider (JSlider.HORIZONTAL, -25, 25, 0);
          ASlider.setMajorTickSpacing (50);
          ASlider.setMinorTickSpacing (10);
          ASlider.setPaintTicks (true);
          ASlider.setPaintLabels (true);
          ASlider.setAlignmentX (Component.LEFT_ALIGNMENT);
    
          BSlider = new JSlider (JSlider.HORIZONTAL, -25, 25, 0);
          BSlider.setMajorTickSpacing (50);
          BSlider.setMinorTickSpacing (10);
          BSlider.setPaintTicks (true);
          BSlider.setPaintLabels (true);
          BSlider.setAlignmentX (Component.LEFT_ALIGNMENT);
    
          CSlider = new JSlider (JSlider.HORIZONTAL, -25, 25, 0);
          CSlider.setMajorTickSpacing (50);
          CSlider.setMinorTickSpacing (10);
          CSlider.setPaintTicks (true);
          CSlider.setPaintLabels (true);
          CSlider.setAlignmentX (Component.LEFT_ALIGNMENT);
    
          SliderListener listener = new SliderListener();
          ASlider.addChangeListener (listener);
          BSlider.addChangeListener (listener);
          CSlider.addChangeListener (listener);
    
    
          ALabel = new JLabel ("a: 0");
          ALabel.setAlignmentX (Component.LEFT_ALIGNMENT);
          BLabel = new JLabel ("b: 0");
          BLabel.setAlignmentX (Component.LEFT_ALIGNMENT);
          CLabel = new JLabel ("c: 0");
          CLabel.setAlignmentX (Component.LEFT_ALIGNMENT);
          controls = new JPanel();
          BoxLayout layout = new BoxLayout (controls, BoxLayout.Y_AXIS);
          controls.setLayout (layout);
          controls.add (ALabel);
          controls.add (ASlider);
          controls.add (Box.createRigidArea (new Dimension (0, 20)));
          controls.add (BLabel);
          controls.add (BSlider);
          controls.add (Box.createRigidArea (new Dimension (0, 20)));
          controls.add (CLabel);
          controls.add (CSlider);
    
    
    
          graphPanel = new JPanel();
          graphPanel.setPreferredSize (new Dimension (500, 500));
          graphPanel.setBackground (Color.white);
    
          add (controls); 
          add (graphPanel);
    
    
    
    
       }   
    
    
    
         public void paintComponent(Graphics page)
       {  
    
         super.paintComponent (page);
    
    
    
    
             x = (-B + (Math.sqrt((B*B - ((4 * A * C))))))/ (2 * A);
             Y = (A*(Math.pow(x,2)))+(B*x)+(C);
             int g = (int)Math.round(x);
             int h = (int)Math.round(Y);
             page.setColor (Color.black);
             page.drawOval (g, h, 1, 1);
    
    
    
        }
    
    
       public class SliderListener implements ChangeListener
       {
    ///
    ///Reads the user input via slider.
    ///
    
          public void stateChanged (ChangeEvent event)
          {
             A = ASlider.getValue();
             B = BSlider.getValue();
             C = CSlider.getValue();
    
             ALabel.setText ("a: " + A);
             BLabel.setText ("b: " + B);
             CLabel.setText ("c: " + C);
    
          }
    

    } }

提交回复
热议问题