2013-02-27 7 views
1

Que dois-je modifier pour créer ce code afin que JTextArea affiche la valeur finale de JSlider? Actuellement, il imprime tous les endroits où le curseur a été. Je veux juste qu'il montre dans le JTextArea la position finale du curseur plutôt que tous les nombres qu'il a été.Valeur JSlider ChangeListener pour 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 

} 

}

Répondre

1

Chaque fois que votre état change, vous ajoutez une nouvelle JTextArea:

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

Au lieu de cela, ajoutez une JTextArea une seule fois dans votre constructeur SliderDemo et utilisez simplement:

bob.setText(...) 

dans votre ChangeListener

+0

Je vois. Merci beaucoup. – johnsonjp34

Questions connexes