Hallo zusammen,
jetzt habe ich eine Weile per Internet gesucht, mit Codeschnipseln verglichen und bin zur keine Lösung gekommen.
Folgende Aufgabe:
Ich möchte eine kleine Komponente (in Form eines JPanels) bauen, die mir, sobald der Benutzer die Werte ändert, dies per PropertyChangeListener mitteilt.
Ich habe mir bereits dieses Beispiel angeschaut, welches auch funktioniert:
http://openbook.rheinwerk-verlag.de...tml#dodtpce3bb668-cab3-46d9-ab81-5febb722a0a8
Hier mein Code (hab alles unnötige rausgeschmissen und nur ein JSpinner drin gelassen, damit es übersichtlicher wird):
Die Ausgabe "ChangeListener" auf der Konsole kommt. Aber der PropertyChangeSupport scheint seine Aufgabe, den Listener zu benachrichtigen, nicht nachzukommen.
Was habe ich übersehen?
jetzt habe ich eine Weile per Internet gesucht, mit Codeschnipseln verglichen und bin zur keine Lösung gekommen.
Folgende Aufgabe:
Ich möchte eine kleine Komponente (in Form eines JPanels) bauen, die mir, sobald der Benutzer die Werte ändert, dies per PropertyChangeListener mitteilt.
Ich habe mir bereits dieses Beispiel angeschaut, welches auch funktioniert:
http://openbook.rheinwerk-verlag.de...tml#dodtpce3bb668-cab3-46d9-ab81-5febb722a0a8
Hier mein Code (hab alles unnötige rausgeschmissen und nur ein JSpinner drin gelassen, damit es übersichtlicher wird):
Java:
public class PropertyChangeTest extends JPanel
{
private PropertyChangeSupport changes = new PropertyChangeSupport( this );
public PropertyChangeTest()
{
setLayout( new FlowLayout( FlowLayout.LEFT ) );
JSpinner spinner = new JSpinner( new SpinnerNumberModel( Year.now().getValue(), 1800, 3000, 1 ) );
spinner.setEditor( new JSpinner.NumberEditor( spinner, "#" ) );
add( spinner );
spinner.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
System.out.println( "ChangeListener" );
changes.firePropertyChange( "yearchange", spinner.getValue(), spinner.getValue() );
}
} );
}
public void addPropertyChangeListener( String name, PropertyChangeListener l )
{
changes.addPropertyChangeListener( name, l );
}
public void removePropertyChangeListener( PropertyChangeListener l )
{
changes.removePropertyChangeListener( l );
}
public static void main( String[] args )
{
JFrame frame = new JFrame( "Test" );
PropertyChangeTest c = new PropertyChangeTest();
c.addPropertyChangeListener( "yearchange", (e) -> System.out.println( "Jahr neu: " + e.toString() ) );
frame.add( c );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setVisible( true );
}
}
Die Ausgabe "ChangeListener" auf der Konsole kommt. Aber der PropertyChangeSupport scheint seine Aufgabe, den Listener zu benachrichtigen, nicht nachzukommen.
Was habe ich übersehen?
Zuletzt bearbeitet: