zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

if ( source.getName().equals("sliderA") )
  textA.setText( source.getValue() + " " );
if ( source.getName().equals("sliderB") )
  textB.setText( source.getValue() + " " );

Vollständiges Programm

Sliders and Change Listener

Hier ist das vollständige (aber nutzlose) Programm. Wenn Sie den Slider betätigen, ändert sich der ausgegebenen Wert in seinem Textfeld.

Einige interessante Punkte sind blau dargestellt. Um Change-Events zu verwenden, importieren Sie javax.swing.event.*. Studieren Sie, wie (1) die Sliders, (2) die Change-Events, die sie erzeugen, und (3) die Listener-Methode zusammenarbeiten, um den richtigen Wert in die Textfelder zu setzen.

Jeder Slider hat eine bevorzugte Größe, gesetzt mit setPreferredSize(). Ein besser ausgearbeites Programm würde dasselbe Dimension-Objekt bei jedem Aufruf verwenden und würde eher final int als Integerliterale verwenden.

Das Layout hängt von der Größe des Frames und der Komponenten ab. Das Gruppieren der Komponenten in Panels wäre besser.

import java.awt.* ;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.* ;

public class SliderFive extends JFrame implements ChangeListener
{
  JSlider    sliderA, sliderB;
  JTextField textA,   textB;

  public SliderFive()
  {
    setTitle( "Change Listener" );
    setDefaultCloseOperation( EXIT_ON_CLOSE );

    sliderA = new JSlider( JSlider.HORIZONTAL, 0, 1000, 400);
    sliderA.setMajorTickSpacing( 100 );
    sliderA.setMinorTickSpacing(  50 );
    sliderA.setPaintTicks( true );
    sliderA.setPaintLabels( true );
    sliderA.setPreferredSize( new Dimension(300,50) ) ;
    sliderA.addChangeListener( this );
    sliderA.setName("sliderA");
    textA   = new JTextField( 4 );
    textA.setText( sliderA.getValue() + " " );

    sliderB = new JSlider( JSlider.HORIZONTAL, 0, 1000, 400 );
    sliderB.setMajorTickSpacing( 100 );
    sliderB.setMinorTickSpacing(  50 );
    sliderB.setPaintTicks( true );
    sliderB.setPaintLabels( true );
    sliderB.setPreferredSize( new Dimension(300,50) ) ;
    sliderB.addChangeListener( this );
    sliderB.setName("sliderB");
    textB   = new JTextField( 4 );
    textB.setText( sliderB.getValue() + " " );

    // Frame
    setLayout( new FlowLayout() );
    add( textA  );
    add( sliderA  );
    add( textB  );
    add( sliderB  );
  }

  public void stateChanged( ChangeEvent evt )
  {
    JSlider source;
    source = (JSlider)evt.getSource();

    if ( source.getName().equals("sliderA") )
      textA.setText( source.getValue() + " " );

    if ( source.getName().equals("sliderB") )
      textB.setText( source.getValue() + " " );
  }

  public static void main ( String[] args )
  {
    SliderFive theApp  = new SliderFive() ;
    theApp.setSize( 400, 150 );
    theApp.setResizable( false );
    theApp.setVisible( true );
  }
}

FRAGE 12:

(Rückblick: ) Wie viele Change-Events werden erzeugt, wenn der Anwender den Schieberegler von einem Wert zu einem anderen zieht.