2017-09-17 3 views
0

javafx.scene.control.ColorPickerを無効にしようとしましたが、私のUIでそれを暗くしません。私はそれを有効にして(見た目を有効にして)見たいと思っていますが、コマンドには反応せず、マウスのクリックで色の表を表示しません(実際には無効)。この動作は、システムの状態(つまり、カラーピッカーが正常に動作することがある)に応じて、通常の動作と互換性があります。以下のように、JavaFX ColorPickerを淡色表示で無効にするにはどうすればいいですか?

は、私はいくつかのオプションを試してみたが、どれも動作するように見えません:

1. setEditable(boolean)

myColorPicker.setEditable(false); 

これはうまく動作しませんが、カラーピッカーは、編集可能なまま。

2.一緒にsetDisable(boolean)setOpacity(double)

myColorPicker.setDisable(true); 
myColorPicker.setOpacity(1.0f); 

appearenceをこれは、カラーピッカーが実際に編集不可になり、そして得られたカラーピッカーが少し薄暗くだけsetDisable(true)を使用するよりも表示されますが、まだありません有効なカラーピッカーの上記のアプローチは、私のコンソールに対応するメッセージを印刷しますが、カラーピッカーは、まだカラーテーブルを示す(マウスクリックに反応し、

myColorPicker.setOnMouseClicked(new EventHandler <MouseEvent>() { 
    public void handle(MouseEvent event) { 
     System.out.println("Mouse clicked."); 
    } 
}); 

myColorPicker.setOnMousePressed(new EventHandler <MouseEvent>() { 
    public void handle(MouseEvent event) { 
     System.out.println("Mouse pressed."); 
    } 
}); 

myColorPicker.setOnMouseReleased(new EventHandler <MouseEvent>() { 
    public void handle(MouseEvent event) { 
     System.out.println("Mouse released."); 
    } 
}); 

:空の実装とonMouseClick()onMousePressed()onMouseReleased()をオーバーライド

3新しい色を選ぶことができます)。 setOnAction(EventHandler<ActionEvent>)をオーバーライドしようとしましたが、同じ効果があります(ただし、カラーピッカーをクリックしたときにコンソールが表示されない点を除きます)。

ここで、それは私のFXMLの抜粋です。

<VBox fx:controller="mypackage.ElementConfigWidget" 
    xmlns:fx="http://javafx.com/fxml" fx:id="root" styleClass="elementConfigPane"> 
    <HBox id="elementInfo"> 
     (...) 
     <ColorPicker fx:id="elementColor" styleClass="elementColor" /> 
    </HBox> 
(...) 
</VBox> 

ここでは私のCSSの抜粋です:

.elementColor { 
    -fx-cursor: hand; 
    -fx-background-color: #fff; 
    -fx-focus-color: transparent; 
    -fx-faint-focus-color: transparent; 
    -fx-pref-width: 50.0; 
} 

私は実際に要素appearenceを維持し、無視することによって、私の問題を解決するためにsetEditable(boolean)を期待入力アクション。私は何が欠けていますか?

ありがとうございます!

答えて

1

私はあなたが1.0

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ColorPicker; 
import javafx.stage.Stage; 

public class Main extends Application { 

    public static void main(String[] args) { 

     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     ColorPicker myColorPicker = new ColorPicker(); 

     myColorPicker.setDisable(true); 
     myColorPicker.setOpacity(1.0); 

     Scene s = new Scene(myColorPicker); 
     s.getStylesheets().add(this.getClass().getResource("test.css").toExternalForm()); 

     primaryStage.setScene(s); 
     primaryStage.show(); 
    } 

} 

そしてtest.css

.color-picker > .label:disabled { 
    -fx-opacity : 1.0; 
} 
+0

グレートにsetDisable(真)と不透明度に必要.AlsoいくつかのCSS でそれを達成するために管理! CSSのことがトリックでした。 :) –

関連する問題