1

我需要更改哪些代码才能使 JTextArea 显示 JSlider 的最终值?目前它会打印滑块到过的所有位置。我只希望它在 JTextArea 中显示滑块的最终位置,而不是它已经到达的所有数字。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;


public class SliderDemo extends JPanel
                    implements 
                               WindowListener,
                               ChangeListener {
//Set up animation parameters.
static final int FPS_MIN = 0;
static final int FPS_MAX = 30;
static final int FPS_INIT = 15;    //initial frames per second


//This label uses ImageIcon to show the doggy pictures.


public SliderDemo() {
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));



    //Create the label.
    JLabel sliderLabel = new JLabel("Frames Per Second", JLabel.CENTER);
    sliderLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

    //Create the slider.
    JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL,
                                          FPS_MIN, FPS_MAX, FPS_INIT);


    framesPerSecond.addChangeListener(this);

    //Turn on labels at major tick marks.

    framesPerSecond.setMajorTickSpacing(10);
    framesPerSecond.setMinorTickSpacing(1);
    framesPerSecond.setPaintTicks(true);
    framesPerSecond.setPaintLabels(true);
    framesPerSecond.setBorder(
            BorderFactory.createEmptyBorder(0,0,10,0));
    Font font = new Font("Serif", Font.ITALIC, 15);
    framesPerSecond.setFont(font);

    add(sliderLabel);
    add(framesPerSecond);

    setBorder(BorderFactory.createEmptyBorder(10,10,10,10));}



/** Add a listener for window events. */
void addWindowListener(Window w) {
    w.addWindowListener(this);
}

//React to window events.


public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}

/** Listen to the slider. */
public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
        int fps = (int)source.getValue();


        String rick = Integer.toString(fps);

        JTextArea bob = new JTextArea();
        add(bob);

        bob.setText(rick);




        }
    }


private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("SliderDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SliderDemo animator = new SliderDemo();

    //Add content to the window.
    frame.add(animator, BorderLayout.CENTER);

    //Display the window.
    frame.pack();
    frame.setVisible(true);

}

public static void main(String[] args) {
    /* Turn off metal's use of bold fonts */
    UIManager.put("swing.boldMetal", Boolean.FALSE);



    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

@Override
public void windowDeiconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

}

}

4

1 回答 1

1

每次您的状态更改时,您都会添加一个新的JTextArea

JTextArea bob = new JTextArea();
add(bob);

相反,JTextArea只需在SliderDemo构造函数中添加一次并简单地使用:

bob.setText(...)

在你的ChangeListener.

于 2013-02-27T20:58:06.610 回答