Java 在JPanel上用滑块绘制二次公式

Java 在JPanel上用滑块绘制二次公式,java,swing,compiler-errors,jpanel,Java,Swing,Compiler Errors,Jpanel,所以,我试着做一个程序,你可以通过滑块输入二次公式(ax^2+bx+c)。然后,在调整a、B和C时,它会绘制一个图形 问题: 我想把我用超级颜料写的东西和滑块放在一个地方。 当我运行它时,滑块已就位。有一个正确背景的空间,我希望我的图形在面板中,但没有实际的图形 这是我的驾驶课: import java.awt.*; import javax.swing.*; public class quadraticslider { public static void main (Strin

所以,我试着做一个程序,你可以通过滑块输入二次公式(ax^2+bx+c)。然后,在调整a、B和C时,它会绘制一个图形

问题:

我想把我用超级颜料写的东西和滑块放在一个地方。 当我运行它时,滑块已就位。有一个正确背景的空间,我希望我的图形在面板中,但没有实际的图形

这是我的驾驶课:

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 pp109quadraticpanel());

      frame.pack();
      frame.setVisible(true);
   }
}
以下是panel类:

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;

  //
  //SLIDERS YO
  //
   public quadraticpanel()
   {
      ASlider = new JSlider (JSlider.HORIZONTAL, 0, 255, 0);
      ASlider.setMajorTickSpacing (50);
      ASlider.setMinorTickSpacing (10);
      ASlider.setPaintTicks (true);
      ASlider.setPaintLabels (true);
      ASlider.setAlignmentX (Component.LEFT_ALIGNMENT);

      BSlider = new JSlider (JSlider.HORIZONTAL, 0, 255, 0);
      BSlider.setMajorTickSpacing (50);
      BSlider.setMinorTickSpacing (10);
      BSlider.setPaintTicks (true);
      BSlider.setPaintLabels (true);
      BSlider.setAlignmentX (Component.LEFT_ALIGNMENT);

      CSlider = new JSlider (JSlider.HORIZONTAL, 0, 255, 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);




   }   

    //Here I'm taking the equation, running it through -10 to 10
    //It takes the doubles from the equation, converts
    //it to int then draws the quadratic formula in dots.

     public void paintComponent(Graphics page)
   {  

     super.paintComponent (page);

     for ( x=-10; x <= 10; x++)
     {
         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.fillOval (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);

      }
   }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.event.*;
公共类方形面板扩展JPanel
{
私人JPanel控件,graphPanel;
私人JSlider ASlider、BSlider、CSlider;
二等兵贾拉贝尔·阿拉贝尔、布拉贝尔、克拉贝尔;
双A,B,C,x,Y;
//
//滑块溜溜球
//
公共事务委员会()
{
ASlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
ASlider.setmajortick间距(50);
ASlider.setminortick间距(10);
ASlider.setPaintTicks(真);
ASlider.setPaintLabels(真);
ASlider.setAlignmentX(组件左对齐);
BSlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
b滑翔机设置主轨道间距(50);
b滑动器设置最小间隔(10);
b滑动器设置画笔(真);
b滑动。设置油漆标签(正确);
b滑块设置对齐X(组件左对齐);
CSlider=新的JSlider(JSlider.HORIZONTAL,0,255,0);
CSlider.setMajorTickSpacing(50);
CSlider.setMinorTickSpacing(10);
CSlider.setPaintTicks(真);
CSlider.setPaintLabels(真);
CSlider.setAlignmentX(组件左对齐);
SliderListener listener=新的SliderListener();
ASlider.addChangeListener(listener);
BSlider.addChangeListener(监听器);
CSlider.addChangeListener(listener);
阿拉贝尔=新的JLabel(“a:0”);
ALabel.setAlignmentX(组件左对齐);
BLabel=新的JLabel(“b:0”);
BLabel.setAlignmentX(组件左对齐);
CLabel=newjlabel(“c:0”);
CLabel.setAlignmentX(组件左对齐);
控件=新的JPanel();
BoxLayout=新的BoxLayout(控件,BoxLayout.Y_轴);
控件。设置布局(布局);
controls.add(阿拉贝尔);
controls.add(ASlider);
controls.add(Box.createRigidArea(新维度(0,20));
controls.add(BLabel);
控件。添加(b滑块);
controls.add(Box.createRigidArea(新维度(0,20));
controls.add(CLabel);
controls.add(CSlider);
graphPanel=新的JPanel();
graphPanel.setPreferredSize(新尺寸(500500));
图板立根(颜色:白色);
添加(控制);
添加(图形面板);
}   
//这里我取方程,从-10到10进行计算
//它从方程中取双精度,转换为
//将其转换为int,然后用圆点绘制二次公式。
公共组件(图形页)
{  
super.paintComponent(第页);
对于(x=-10;x这些使用可能很有趣。如图所示,您可以使用设置渲染动画,这将使用
JSlider
更新图表

附录:代码的这种变化可能会指导你前进。注意

  • 覆盖
    图形面板中的相关方法

  • 缩放和反转坐标,如图所示

  • 考虑分数值的
    JSpinner

  • 使用常量保持一致性

  • 为清晰起见,请使用通用命名约定

  • 另见

import java.awt.*;
导入javax.swing.*;
导入javax.swing.event.ChangeEvent;
导入javax.swing.event.ChangeListener;
/**@见https://stackoverflow.com/a/20556929/230513 */
公共类正交滑翔机{
专用静态最终整数N=500;
专用静态最终int A=1;
专用静态最终int B=0;
私有静态最终int C=0;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新的JFrame(“二次滑块”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(新的方形面板());
frame.pack();
frame.setVisible(true);
}
});
}
私有静态类QuadraticPanel扩展了JPanel{
专用箱控制;
私人JPanel graphPanel;
私人JSlider aSlider、bSlider、cSlider;
二等兵贾拉贝尔·阿拉贝尔、布拉贝尔、克拉贝尔;
双a,b,c,x,y;
公共事务委员会(){
aSlider=新的JSlider(JSlider.HORIZONTAL,-25,25,A);
aSlider.setmajortick间距(10);
aSlider.setMinorTickSpacing(5);
aSlider.setPaintTicks(真);
aSlider.setPaintLabels(真);
aSlider.setAlignmentX(组件左对齐);
bSlider=新的JSlider(JSlider.HORIZONTAL,-10,10,B);
b滑块设置主滑块间距(5);
b滑块设置最小间隙(1);
b滑块设置画笔(真);
b滑块设置油漆标签(真);
b滑块设置对齐X(组件左对齐);
cSlider=新的JSlider(JSlider.HORIZONTAL,-100100,C);
c滑道设置主轨道间距(50);
cSlider.setMinorTickSpacing(10);
cSlider.setPaintTicks(真);
cSlider.setPaintLabels(真);
cSlider.setAlignmentX(组件左对齐);
SliderListener listener=新的SliderListener();
aSlider.addChangeListener(listener);
bSlider.addChangeListener(监听器);
cSlider.addChangeListener(监听器);
阿拉贝尔=新的JLabel(“a:0”);
bLabel=新的JLabel(“b:0”);
cLabel=newjlabel(“c:0”);
控件=新框(BoxLayout.Y_轴);
控制
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/** @see https://stackoverflow.com/a/20556929/230513 */
public class QuadraticSlider {

    private static final int N = 500;
    private static final int A = 1;
    private static final int B = 0;
    private static final int C = 0;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("Quadratic Slider");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new QuadraticPanel());
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    private static class QuadraticPanel extends JPanel {

        private Box controls;
        private JPanel 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, A);
            aSlider.setMajorTickSpacing(10);
            aSlider.setMinorTickSpacing(5);
            aSlider.setPaintTicks(true);
            aSlider.setPaintLabels(true);
            aSlider.setAlignmentX(Component.LEFT_ALIGNMENT);

            bSlider = new JSlider(JSlider.HORIZONTAL, -10, 10, B);
            bSlider.setMajorTickSpacing(5);
            bSlider.setMinorTickSpacing(1);
            bSlider.setPaintTicks(true);
            bSlider.setPaintLabels(true);
            bSlider.setAlignmentX(Component.LEFT_ALIGNMENT);

            cSlider = new JSlider(JSlider.HORIZONTAL, -100, 100, C);
            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");
            bLabel = new JLabel("b: 0");
            cLabel = new JLabel("c: 0");
            controls = new Box(BoxLayout.Y_AXIS);
            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() {
                private static final int SCALE = 5;
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(N, N);
                }

                @Override
                public void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    for (x = -10; x <= 10; x++) {
                        y = a * x * x + b * x + c;
                        g.setColor(Color.black);
                        int w = (int) (x * SCALE) + N / 2;
                        int h = (int) (-y * SCALE) + N / 2;
                        g.fillOval(w, h, 5, 5);
                    }
                }
            };
            graphPanel.setBackground(Color.white);

            add(controls);
            add(graphPanel);
            listener.stateChanged(null);
        }

        class SliderListener implements ChangeListener {

            @Override
            public void stateChanged(ChangeEvent event) {
                a = aSlider.getValue() / 5d;
                b = bSlider.getValue();
                c = cSlider.getValue();

                aLabel.setText("a: " + a);
                bLabel.setText("b: " + b);
                cLabel.setText("c: " + c);

                repaint();
            }
        }
    }
}
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);
   }
}
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);

      }