簡體   English   中英

Java中帶有滑塊的二次方程

[英]Quadratic Equation In Java With Sliders

我必須設計並實現一個應用程序,該應用程序繪制ax ^ 2 + bx + c方程的圖形,其中ab和c的值是使用滑塊設置的。 我正在編輯我的原始帖子,因此將盡我所能發布sscce。 我的代碼如下。 一切都會編譯並運行。 我的一個問題是,為什么移動滑塊時圖形不顯示任何內容? 這是我的2個班級文件:

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

別忘了-這些只是片段,您必須自己做一些工作...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM