Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中带滑块的二次方程_Java_Listener_Graphing_Sliders - Fatal编程技术网

Java中带滑块的二次方程

Java中带滑块的二次方程,java,listener,graphing,sliders,Java,Listener,Graphing,Sliders,我必须设计并实现一个应用程序,绘制ax^2+bx+c方程的图形,其中a b和c的值是使用滑块设置的。我正在编辑我的原创文章,因此我将尽我所能发布一篇sscce。我的代码如下。一切都在编译和运行。我的一个问题是,当滑块移动时,为什么我的图形不显示任何内容?以下是我的两个类文件: import java.awt.*; import javax.swing.*; public class QuadraticGraph { public static void main (String[] a

我必须设计并实现一个应用程序,绘制ax^2+bx+c方程的图形,其中a b和c的值是使用滑块设置的。我正在编辑我的原创文章,因此我将尽我所能发布一篇sscce。我的代码如下。一切都在编译和运行。我的一个问题是,当滑块移动时,为什么我的图形不显示任何内容?以下是我的两个类文件:

import java.awt.*;
import javax.swing.*;

public class QuadraticGraph
{

   public static void main (String[] args)
   {
      JFrame frame = new JFrame ("Quadratic Grapher");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

      frame.getContentPane().add(new QuadraticPanel());

      frame.pack();
      frame.setVisible(true);
   }
}



import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class QuadraticPanel extends JPanel
{
   private JPanel controls, quadpanel;
   private JSlider aslider, bslider, cslider;
   private JLabel alabel, blabel, clabel;

   //-----------------------------------------------------------------
   //  Sets up the sliders and their labels, aligning them along
   //  their left edge using a box layout.
   //-----------------------------------------------------------------
   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);

      quadpanel = new JPanel();
      quadpanel.setPreferredSize (new Dimension (500, 500));
      quadpanel.setBackground (Color.white);

      add (controls);
      add (quadpanel);
   }
   //*****************************************************************
   //  Represents the listener for all three sliders.
   //*****************************************************************
   private class SliderListener implements ChangeListener
   {
      private double a, b, c, x, y, g, h;

      //--------------------------------------------------------------
      //  Gets the value of each slider, then updates the labels and
      //  the color panel.
      //--------------------------------------------------------------
      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);

      }
         public void  paintComponent (Graphics 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);

         }
      }
   }

我猜您对java非常陌生,所以这里有一些初学者帮助^^

创建一个内容面板,并为面板设置一些布局; 将滑块和绘图面板添加到内容面板

您做得不错,在滑块中添加了一个更改侦听器,但他们应该重新绘制绘图面板

我将添加这些代码片段以使您更容易理解^_^

private JPanel drawPanel; //don't forget to create a proper one! override paint in that panel!
private int a,b,c;
public QuadraticPanel(){ //constructor
    setLayout(new BoderLayout();
    JSlider aSidler = new JSlider();
    slider.addChangeListener(new ChangeListener(){
        @Override
        public void stateChanged(ChangeEvent arg0) {
              a = arg0.getValue(); //setting a value
              //it might even be better to calculate the value
              //BEFORE you redraw
              //recalcEquotiation()
              drawPanel.repaint(); //and redraw the paint-panel
        }           
    });
    add(aSlider, Borderlayout.WEST); //add more sliders with better layouts or subcomponents
    add(drawPanel, BorderLayout.CENTER);
 }

别忘了-这些只是片段,你必须自己做一些工作…

欢迎使用SO。不幸的是,这不是工作的方式。这不是一个“帮助”网站或教程网站,“这是我的代码,请帮助我让它工作”这样的问题被认为是不合适的。您应该做的是在IDE调试器中运行它,以了解发生了什么,以及这与您想要的有什么不同。然后,如果您仍然无法解释您所做的工作以及您不了解的具体部分,最好是作为一名Java初学者,使用匿名类实现可能会有点困难。