JSpinner ChangeEvent erzwingen

BlubBlub

Bekanntes Mitglied
Hi ich verwende einen JSpinner.
Dieser JSpinner hat einen ChangeListener.
Der ChangeListener wird jedes mal ausgelöst, sobald
sich der Wert im JSpinner ändert.
Zusätzlich habe ich einen JButton.
Der JButton hat einen ActionListener.
Dieser wird bei jedem betätigen des Buttons ausgelöst.
Im ActionListener steht ein Befehl der den Wert des
JSpinners auf 11 setzt.
War der Wert im JSpinner vorher nicht 11 so wird nach dem
Betätigen des JButtons der ChangeListener des JSpinner
aufgerufen. War der Wert im JSpinner aber vorher bereits 11
so wird der ChangeListener nicht aufgerufen.

Frage: Wie schaffe ich es, dass der ChangeListener dennoch
aufgerufen wird auch wenn der Wert im JSpinner vorher 11 war?


Java:
public class MyFrame extends JFrame
{	
	private JSpinner spinner;
	
	public MyFrame()
	{
		super();
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLayout(new FlowLayout());
		
		Container contentPane = this.getContentPane();
		
		SpinnerModel model = new SpinnerNumberModel(0, 0, 100, 1); 
		spinner = new JSpinner(model);
		spinner.addChangeListener(new ChangeListener(){

			@Override
			public void stateChanged(ChangeEvent arg0) {
				System.out.println("Change Listener");
			}});
		
		JButton button = new JButton("Button");
		button.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				spinner.setValue(new Integer(11));
			}});
		
		contentPane.add(spinner);
		contentPane.add(button);
		
		this.setSize(500, 400);
		this.setVisible(true);
	}
}
 

eRaaaa

Top Contributor
Vermutlich indem du dir ein eigenes SpinnerModel schreibst, bzw. das jetzige überschreibst. Denn wenn man sich das SpinnerNumberModel anschaut, sieht man dass das Event in der setValue Methode geworfen wird (allerdings eben nur wenn das value != das alte ist):
Java:
    public void setValue(Object value) {
	if ((value == null) || !(value instanceof Number)) {
	    throw new IllegalArgumentException("illegal value");
	}
	if (!value.equals(this.value)) {  //diese abfrage raus nehmen!
	    this.value = (Number)value;
	    fireStateChanged();
	}
    }
Die Frage ist allerdings. Wieso will man das? Was bringt dir das? :bahnhof:
 

Marco13

Top Contributor
Die Frage hätte ich so ähnlich auch gestellt. Wenn man will, dass ein ChangeEvent geworfen wird, obowhl nichts gechanged wurde, kann man ja gleich
Java:
new Thread(new Runnable() { public void run() { System.out.println("Aaaaa..."); } }).start();
machen :D

Oder anders: Was soll bei dem ChangeEvent passieren, was nicht auch bei dem ActionEvent passieren könnte?
 

bERt0r

Top Contributor
Oder ganz einfach: du lagerst den code vom ChangedListener in einer Methode aus und rufst die dann vom ActionListener auf.
Java:
void changedSpinner()
{
//Code von deinem alten ChangeListener
}
spinner.addChangeListener(new ChangeListener()
{public void valueChanged(ChangeEvent e)
{changedSpinner();}
});
button.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent e)
{
spinner.setValue(11);
changedSpinner();
}
});
 

eRaaaa

Top Contributor
Oder ganz einfach:

Theoretisch schon, aber ganz so leicht wie du es hier darstellst ist es dann doch nicht, denn so würdest du (bis auf den Fall wenn Value 11 ist) jedes mal zwei mal changedSpinner() aufrufen wenn der Button gedrückt wird (wenn denn die richtige Methode implementiert wird vom ChangeListener :bae:) Ob das nun Auswirkungen haben kann oder nicht - wer weiß das hier schon so genau :shock:

/e...das ist mir schon klar hdi....
 
Zuletzt bearbeitet:

hdi

Top Contributor
Theoretisch schon, aber ganz so leicht wie du es hier darstellst ist es dann doch nicht, denn so würdest du (bis auf den Fall wenn Value 11 ist) jedes mal zwei mal changedSpinner() aufrufen wenn der Button gedrückt wird

Naja das ist jetzt nicht so das Problem:

Java:
actionPerformed{
   int neuerWert = gui.getSpinnerWert();
   int alterWert = spinner.getValue();
   spinner.setValue(neuerWert);
   if(neuerWert == alterWert){ // also nur dann
        change event feuern
   )
}

Das man es so nicht machen sollte hat eher den Hintergrund dass es vom Design her nicht passt. Wenn sich nix geändert hat sollte auch kein ChangeEvent auftreten. Nicht umsonst ist das so implementiert, und nicht umsonst heißt der auch ChangeListener und nicht MaybeChangeListener.

D.h. in der actionPerformed sollte er kein Change-Event feuern, sondern sein Zeug direkt machen. Wenn es da eine Redundanz zwischen dieser Aktion und der Aktion nach einem ChangeEvent kommt dann eben auslagern, genauso wie bert0r es gepostet hat.

@TO: Im Endeffekt also der Code von bert0r kombiniert mit dem obigen ActionListener. Aber nenn die Methode in die du auslagerst besser nicht spinnerChanged, das wäre wieder irreführend. Nenn sie lieber spinnerTouched o.ä.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
C JSpinner AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
K Swing JSpinner mit NULL AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
D JCheckbox und JSpinner in JTable AWT, Swing, JavaFX & SWT 9
M JSpinner, setValue AWT, Swing, JavaFX & SWT 7
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
J Swing JSpinner mit zusätzlichem Text? AWT, Swing, JavaFX & SWT 2
B JSpinner Textgröße anpassen AWT, Swing, JavaFX & SWT 2
B JSpinner welche Taste? AWT, Swing, JavaFX & SWT 5
B JSpinner Enter AWT, Swing, JavaFX & SWT 7
G JSpinner ohne Tausendertrennzeichen AWT, Swing, JavaFX & SWT 5
N Wertanzeige mittels JSpinner AWT, Swing, JavaFX & SWT 3
S JSpinner AWT, Swing, JavaFX & SWT 11
G Swing JSpinner nur mit Buttons ändern AWT, Swing, JavaFX & SWT 8
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
T Swing JSpinner in JTable AWT, Swing, JavaFX & SWT 9
C Größe von JSpinner fixieren AWT, Swing, JavaFX & SWT 4
J JSpinner + SpinnerNumberModel int auslesen AWT, Swing, JavaFX & SWT 2
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
Eldorado Swing Popup-Menü mit Jspinner AWT, Swing, JavaFX & SWT 4
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
M JSpinner Font ändern AWT, Swing, JavaFX & SWT 4
Spin JSpinner AWT, Swing, JavaFX & SWT 10
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
S JSpinner der Floats anzeigt..? AWT, Swing, JavaFX & SWT 4
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
elitebiber Swing JSpinner und die Zeit AWT, Swing, JavaFX & SWT 11
T JSpinner Problem AWT, Swing, JavaFX & SWT 6
G JSpinner umdrehen? AWT, Swing, JavaFX & SWT 2
G JSpinner und ChangeListener AWT, Swing, JavaFX & SWT 3
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
Tom299 JSpinner nur Zeitangabe AWT, Swing, JavaFX & SWT 13
G JSpinner Frage AWT, Swing, JavaFX & SWT 2
H JSpinner mit Kalenderwoche und Jahr AWT, Swing, JavaFX & SWT 6
M JSpinner in einer JTable? AWT, Swing, JavaFX & SWT 5
P Frage zu JSpinner AWT, Swing, JavaFX & SWT 3
B JTextFiled, JCheckBox, JSpinner Eigenschaften speichern AWT, Swing, JavaFX & SWT 2
R Konvertieren von Werten im JSpinner AWT, Swing, JavaFX & SWT 2
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
B JSpinner passt optisch nicht zu anderen Komponenten AWT, Swing, JavaFX & SWT 2
D JSpinner ohne Edit Möglichkeit AWT, Swing, JavaFX & SWT 5
J JSpinner mit zahlen AWT, Swing, JavaFX & SWT 10
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
L JSpinner + addRow() AWT, Swing, JavaFX & SWT 3
M .txt unter Verwendung von JSpinner in Textfeld schreiben AWT, Swing, JavaFX & SWT 4
N JDK1.4- Überladen d. Methoden getValue setValue von JSpinner AWT, Swing, JavaFX & SWT 2
S JSpinner: Editieren einschränken AWT, Swing, JavaFX & SWT 4
F JSpinner FocusListener AWT, Swing, JavaFX & SWT 2
W JSpinner: Button vertikal anordnen AWT, Swing, JavaFX & SWT 2
R JSpinner rotieren AWT, Swing, JavaFX & SWT 6
A JSpinner in Dialogbox integrieren? AWT, Swing, JavaFX & SWT 3
D JSPinner Größe verändern - setSize() funktioniert nicht AWT, Swing, JavaFX & SWT 7
javasdann JSpinner & KeyListener. AWT, Swing, JavaFX & SWT 8
G jspinner schrittweite in Abhängigkeit vom aktuellen Wert AWT, Swing, JavaFX & SWT 3
G JSpinner bringt bei anklicken eine CastException AWT, Swing, JavaFX & SWT 5
flashfactor Un mal ein Problem mit JSpinner AWT, Swing, JavaFX & SWT 7
I jSpinner.getValue() AWT, Swing, JavaFX & SWT 2
G JSpinner für Datumsanzeige AWT, Swing, JavaFX & SWT 2
M JSlider-Wert ändern, ohne ein ChangeEvent auszulösen AWT, Swing, JavaFX & SWT 4
R ChangeEventListener - ChangeEvent AWT, Swing, JavaFX & SWT 1
S Kann man erzwingen, dass Java 'zu Ende zeichnet'..? AWT, Swing, JavaFX & SWT 7
D JFrame mindestgröße erzwingen AWT, Swing, JavaFX & SWT 2
A SWT Scrollbalken im Editorfenster erzwingen AWT, Swing, JavaFX & SWT 4
H JTextfield, Sprache erzwingen AWT, Swing, JavaFX & SWT 2
6 ToolTip erzwingen AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
P Tooltip "erzwingen" ? AWT, Swing, JavaFX & SWT 7
O JTable Edit cell edit end erzwingen... AWT, Swing, JavaFX & SWT 7
S JOptionPane.showInputDialog JList erzwingen? AWT, Swing, JavaFX & SWT 4
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
A preferredLayoutSize aufruf erzwingen AWT, Swing, JavaFX & SWT 4
N repaint bei JPanel erzwingen AWT, Swing, JavaFX & SWT 6
B Textausgabe erzwingen AWT, Swing, JavaFX & SWT 8
O Zeilenumbruch erzwingen (FlowLayout? AWT, Swing, JavaFX & SWT 1
N JTextArea Zeilenumbruch erzwingen AWT, Swing, JavaFX & SWT 2
N JList: Auswahl erzwingen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben