JSlider mit Double Werten

joni

Mitglied
Hallo zusammen,

ich habe da schon ein Thread gefunden aber ich komm da irgendwie nicht klar.

Ich habe bis jetzt einen jslider und ne jtextpane und versuche dass der jslider diese wiedergegebene Werte in Double darstellt,

ein auszug aus dem geschlossenen Thread:
ch würde an dem jslider gar nix herumbasteln und statt dessen mir die auflösung seiner steps überlegen. das könnte dann zum beispiel so aussehen:

minimum: 0.1
maximum: 1.0
stepsize: 0.001

daraus folgen dann diese werte:

minimum: 100
maximum: 1000
stepsize: 1

aus dem jeweiligen value kannst du dann wieder deinen doublewert erzeugen indem du das value mit der originalstepsize, also mit 0.001 muliplizierst (bzw. in meinem fall durch 1000 teilst).

ansonsten wirst du nicht nur das model sondern fast den gesamten jslider ändern müssen und das sind schon einige klassen (womit sich dann die frage nach der verhältnismäßigkeit des aufwandes zum nutzen für dich stellt ... da ist die multiplikation/division der doublewerte, sodaß diese sich ganzzahlig darstellen lassen, schon wesentlich einfacher und erheblich schneller zu programmieren).

viel glück

wayne

ich weiss nicht genau was damit gemeint ist, kann mir das jemand plz erläutern?

Danke & Grüsse
 
Wenn man mit double Werten arbeiten möchte bei JSlider heißt es z.B:

Java:
new JSlider( -1000 , 1000 , 0 );

Bei diesen Slider sieht es so aus:

1000 steht für 1.00
-1000 steht demnach für -1.0

900 steht für 0.90
-900 steht demnach für -0.9

550 steht für 0.55
...
usw

Bewegt man dann den Slider um 10
Heißt es:
10 steht für 0.01

Bewegt man dann den Slider um 1
Heißt es:
1 steht für 0.001

Mfg
 
ok, danke für die Antwort schonmal,

aber wie genau kann ich das jetzt umsetzten?

weil
Java:
jSlider1 = new javax.swing.JSlider( -1000, 1000, 0);
setzt ja nur den wertebereich fest muss ich diese dann noch irgendwie dividieren oder so? bin echt ratlos ???:L


EDIT: OK, vielleicht habe ich die Frage am Anfang nicht richtig formulert, ich weiss schon was es macht, aber meine Frage ist WIE man es macht, weill wenn ich einfach den Wertebereich setze passiert genau garnichts und ich weiss nicht wie ich den Wert dividieren kann??, hier mal mein SC vielleicht bringt das ja was.

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

public class EventTest {

	public static void main(String[] args) {
		
		final JSlider jSlider = new JSlider(-1000, 1000, 0);
		final JTextPane jTextPane = new JTextPane();
		
		
		
		jSlider.setValue(0);
		jTextPane.setText("0.0000 g");
		jSlider.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent ev) {
				jTextPane.setText("" + jSlider.getValue() + " g");
			}
		});

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.getContentPane().add(jSlider, BorderLayout.SOUTH);
		f.add(jTextPane, BorderLayout.NORTH);
		f.pack();
		f.setVisible(true);

	}
}
 
Zuletzt bearbeitet:
mal ein kleines Beispiel

Java:
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class JSliderTest extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JSlider jSlider = null;
	private JLabel jLabel = null;

	/**
	 * This method initializes jSlider	
	 * 	
	 * @return javax.swing.JSlider	
	 */
	private JSlider getJSlider() {
		if (jSlider == null) {
			jSlider = new JSlider(-1000, 1000, 0);
			jSlider.addChangeListener(new javax.swing.event.ChangeListener() {
				public void stateChanged(javax.swing.event.ChangeEvent e) 
				{
					JSlider slider = (JSlider) e.getSource();
					jLabel.setText(""+(double)slider.getValue() / 1000);
				}
			});
		}
		return jSlider;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JSliderTest thisClass = new JSliderTest();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public JSliderTest() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
		setLocationRelativeTo(null);
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jLabel = new JLabel();
			jLabel.setText("0");
			jLabel.setHorizontalAlignment(SwingConstants.CENTER);
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJSlider(), BorderLayout.CENTER);
			jContentPane.add(jLabel, BorderLayout.SOUTH);
		}
		return jContentPane;
	}

}
 
mal ein kleines Beispiel

Java:
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class JSliderTest extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JSlider jSlider = null;
	private JLabel jLabel = null;

	/**
	 * This method initializes jSlider	
	 * 	
	 * @return javax.swing.JSlider	
	 */
	private JSlider getJSlider() {
		if (jSlider == null) {
			jSlider = new JSlider(-1000, 1000, 0);
			jSlider.addChangeListener(new javax.swing.event.ChangeListener() {
				public void stateChanged(javax.swing.event.ChangeEvent e) 
				{
					JSlider slider = (JSlider) e.getSource();
					jLabel.setText(""+(double)slider.getValue() / 1000);
				}
			});
		}
		return jSlider;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JSliderTest thisClass = new JSliderTest();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public JSliderTest() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
		setLocationRelativeTo(null);
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jLabel = new JLabel();
			jLabel.setText("0");
			jLabel.setHorizontalAlignment(SwingConstants.CENTER);
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJSlider(), BorderLayout.CENTER);
			jContentPane.add(jLabel, BorderLayout.SOUTH);
		}
		return jContentPane;
	}

}



Danke vielmals Verjigorm, genau diese Zeile habe ich gesucht:

Java:
jLabel.setText(""+(double)slider.getValue() / 1000);


:toll: Merci
 

Neue Themen


Zurück
Oben