我想用控制条控制风速,想用  public void stateChanged(ChangeEvent e)  改变时间Timer中的时间间隔 但是行不通啊
求高手解答?import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.event.*;/*FanControl 类   按钮   风扇  滑动条   */ class FanControl extends JPanel implements ActionListener,ChangeListener
{
int i = 0;
int j = 50;
int m = 30;    Timer t1 = new Timer(j,this);
    Timer t2 = new Timer(j,this);
    protected void paintComponent(Graphics g)
{
super.paintComponent(g);int xCenter = getWidth() / 2;
    int yCenter = getHeight() / 2;
    int radius = (int)(Math.min(getWidth(),getHeight())*0.3);
    int x = xCenter - radius;
    int y = yCenter - radius;
g.fillArc(x,y,2*radius,2*radius,i,m);
g.setColor(Color.red);
g.fillArc(x,y,2*radius,2*radius,i + 90,m);
g.setColor(Color.yellow);
g.fillArc(x,y,2*radius,2*radius,i + 180,m);
g.setColor(Color.blue);
g.fillArc(x,y,2*radius,2*radius,i + 270,m);
g.setColor(Color.gray);
}/////////////////////三个按钮//////////////////////////
JButton jbtStart = new JButton("Start");
JButton jbtStop = new JButton("Stop");
JButton jbtRollback = new JButton("Rollback");//////////////////水平滑动块//////////////////////////
JSlider jslider = new JSlider();
public void stateChanged(ChangeEvent e)
{if(e.getSource() == jslider)
{
//double value = jslider.getValue();
//j = (int)value;}
}public FanControl()
{JPanel p1 = new JPanel();                          //面板P1放置按钮
p1.add(jbtStart);
jbtStart.addActionListener(this);
p1.add(jbtStop);
jbtStop.addActionListener(this);
p1.add(jbtRollback);
        jbtRollback.addActionListener(this);JPanel p2 = new JPanel();                            //面板p2放置滚动条
p2.add(jslider);
jslider.addChangeListener(this);
setLayout(new BorderLayout());                      //设置整个面板布局
this.add(p1,BorderLayout.SOUTH);
this.add(p2,BorderLayout.NORTH);
}public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbtStart)
{
t2.stop();
t1.start(); 
}
else if(e.getSource() == jbtStop)
{
t1.stop();
t2.stop();
}
else if(e.getSource() == jbtRollback)
{
t1.stop();
t2.start(); 
}
else if(e.getSource() == t1)
{
i++;}
else if(e.getSource() == t2)
{
i--;
}
repaint();
}
}public class TestFanControl
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
FanControl f = new FanControl(); 
frame.getContentPane().add(f);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
}
}

解决方案 »

  1.   

    你控制的变量不对,控制风扇角速度的不是Timer的delay值,而是另外变量iimport javax.swing.*;
    import java.awt.*;
    import java.awt.Graphics;
    import java.awt.event.*;
    import javax.swing.event.*;/*FanControl 类  按钮 风扇 滑动条  */class FanControl extends JPanel implements ActionListener,ChangeListener
    {
        int i = 0;
        int j = 50;
        int m = 30;
        int speed=1;    Timer t1 = new Timer(j,this);
        Timer t2 = new Timer(j,this);    @Override
        protected void paintComponent(Graphics g)
        {
            super.paintComponent(g);        double value = jslider.getValue();
            speed = (int)(value/10)+1;
            
            int xCenter = getWidth() / 2;
            int yCenter = getHeight() / 2;
            int radius = (int)(Math.min(getWidth(),getHeight())*0.3);
            int x = xCenter - radius;
            int y = yCenter - radius;
            g.fillArc(x,y,2*radius,2*radius,i,m);
            g.setColor(Color.red);
            g.fillArc(x,y,2*radius,2*radius,i + 90,m);
            g.setColor(Color.yellow);
            g.fillArc(x,y,2*radius,2*radius,i + 180,m);
            g.setColor(Color.blue);
            g.fillArc(x,y,2*radius,2*radius,i + 270,m);
            g.setColor(Color.gray);
        }    /////////////////////三个按钮//////////////////////////
        JButton jbtStart = new JButton("Start");
        JButton jbtStop = new JButton("Stop");
        JButton jbtRollback = new JButton("Rollback");    //////////////////水平滑动块//////////////////////////
        JSlider jslider = new JSlider();
        public void stateChanged(ChangeEvent e)
        {        if(e.getSource() == jslider)
            {
                double value = jslider.getValue();
                speed = (int)(value/10)+1;            System.out.println("滑块拖动");
            }
        }    public FanControl()
        {        JPanel p1 = new JPanel(); //面板P1放置按钮
            p1.add(jbtStart);
            jbtStart.addActionListener(this);
            p1.add(jbtStop);
            jbtStop.addActionListener(this);
            p1.add(jbtRollback);
            jbtRollback.addActionListener(this);        JPanel p2 = new JPanel(); //面板p2放置滚动条
            p2.add(jslider);
            jslider.addChangeListener(this);
            setLayout(new BorderLayout()); //设置整个面板布局
            this.add(p1,BorderLayout.SOUTH);
            this.add(p2,BorderLayout.NORTH);
        }
        @Override
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == jbtStart){
                t2.stop();
                t1.start();
            }
            else if(e.getSource() == jbtStop){
                t1.stop();
                t2.stop();
            }
            else if(e.getSource() == jbtRollback){
                t1.stop();
                t2.start();
            }
            else if(e.getSource() == t1){
                i+=speed;        }
            else if(e.getSource() == t2){
                i-=speed;
            }
            repaint();
        }
    }
      

  2.   


    你改的参数就不应该是那个Timer的时间间隔,单独改那个参数风扇的角速度没有改变,你自己没发现么?