JavaFX ColorPicker setValue funktioniert nicht

godi

Aktives Mitglied
Hallo,

anscheinend hat der ColorPicker von JavaFX2 einen Bug da die setValue nicht richtig funktioniert.
Es wird zwar der neue Wert übernommen aber die Anzeige (Farbe und Wertebereich) ändert sich nicht.
Siehe hier:
hg: openjfx/2.2/controls/rt: fix RT-21124 ColorPicker setValue dont affect obviously.

Gibt es schon eine JavaFX Version die diesen Bug behoben hat?
Notfalls: Wie könnte ich dies umgehen?

Hier noch ein Beispiel mit dem ColorPicker:
Java:
package colorPicker;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
public class ColorPickerSample extends Application {    
	
	private ColorPicker colorPicker;
	
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
        stage.setTitle("ColorPicker");
        Scene scene = new Scene(new HBox(20), 600, 100);
        HBox box = (HBox) scene.getRoot();
        box.setPadding(new Insets(5, 5, 5, 5));          
             
        colorPicker = new ColorPicker();
        colorPicker.setValue(Color.CORAL);
      
        
        final Text text = new Text("Try the color picker!");
        text.setFont(Font.font ("Verdana", 20));
        text.setFill(colorPicker.getValue());
                    
                
        colorPicker.valueProperty().addListener(new ChangeListener<Color>() {
			@Override
			public void changed(ObservableValue<? extends Color> arg0,
					Color arg1, Color arg2) {
				text.setFill(arg2);   				
                System.out.println(arg2);
				
			}
		});
        
        final TextField colorTxF = new TextField();  
        colorTxF.setText(colorPicker.getValue().toString());
        colorTxF.setOnAction(new EventHandler<ActionEvent>() {			
			@Override
			public void handle(ActionEvent arg0) {
				colorPicker.setValue(Color.web(colorTxF.getText()));				
			}
		});
        
        colorPicker.setOnAction(new EventHandler<ActionEvent>() {			
			@Override
			public void handle(ActionEvent arg0) {
				colorTxF.setText(colorPicker.getValue().toString());	
			}
		});
      
 
        box.getChildren().addAll(colorPicker, colorTxF, text);
 
        stage.setScene(scene);
        stage.show();
    }
       
}

godi
 
Danke für deine Antwort.

Ich habe die neueste Version (2.2.4) installiert, bekomme es aber in Eclipse und auch nicht in Netbeans zum laufen.
In Eclipse habe ich es schon mit der jfxrt.jar aus dem Ordner
.../Programme/Java/jre7
.../Programme/Java/jdk1.7.0_11
.../Programme/Oracle/JavaFX 2.2 Runtime
getestet.
Welche library muss ich da einbinden damit dies Funktioniert?
 
Hmm...
Bei mir will das nicht so richtig.
Ich habe jetzt alle anderen Java Updates deinstalliert, so dass nur noch 7u11 und JavaFX 2.2.4 installiert ist.

Leider will es einfach nicht funktionieren.

Im Anhang noch ein Bild von den NetBeans Library Einstellungen und meiner installierten Java Software.
 

Anhänge

  • NetBeans_Libraries.jpg
    NetBeans_Libraries.jpg
    105,8 KB · Aufrufe: 45
  • InstallierteJavaSoftware.JPG
    InstallierteJavaSoftware.JPG
    25,8 KB · Aufrufe: 38
Da habe ich dann keine Ahnung, woran es liegen könnte. Bei mir sieht es im Prinzip wie bei dir aus, nur dass ich die 32-Bit-Version verwende (und nicht so eine riesige Auflösung habe 😀).
Außerdem habe ich keinen Programmeintrag für "JavaFX 2.2.4". Hast du das nochmal separat installiert?
 

Anhänge

  • ColorPickerSample.jpg
    ColorPickerSample.jpg
    109,5 KB · Aufrufe: 35
Außerdem habe ich keinen Programmeintrag für "JavaFX 2.2.4". Hast du das nochmal separat installiert?

Ja habe ich nochmal separat installiert. Hat aber nix gebracht. 😉

Naja ist momentan nicht so wichtig.
Jetzt habe ich es so gelöst dass ich einfach einen neuen ColorPicker erstelle und anstelle des alten in das GridPane einfüge.
Funktioniert momentan mal so weit.
 
Ach, ich habe erst jetzt den Fehler wirklich verstanden. 😳
Man gibt eine gültige Farbe im Textfeld ein und bestätigt mit der Eingabetaste. Die Schriftfarbe wird geändert, die im ColorPicker angezeigte jedoch nicht. Wenn man ihn aufklappt, ist die korrekte Farbe selektiert, falls sie in den Defaults vorhanden ist. Ansonsten wird sie im "Custom Colors.."-Dialog angezeigt.
Scheint dann wirklich nicht richtig behoben worden zu sein oder mit dem Ticket war etwas anderes gemeint.
Habe dazu nun diesen Thread gefunden: OTN Discussion Forums : setValue() doesn't work correctly on a ColorPicker (kam vier Tage vor deinem)
Und dort verlinkt dieses Ticket: [#RT-26633] [ColorPicker] setValue(Color value) partially reflects changes - JavaFX
Ein Fix ist also für JavaFX 8 geplant.

Bis dahin wäre ein Workaround in deinem Fall dann einfach diese Zeile:
[JAVA=57]colorPicker.fireEvent(arg0);[/code]
 
Zuletzt bearbeitet:

Zurück
Oben