2017-09-02 2 views
-1

(Color)を標準Color.(ドット付き)に置き換えて、UserDataから色を取得する方法はありますか?トグルボタン(カラー)ドットなしのJava

tb1.setUserData(Color.LIGHTGREEN); 
tb2.setUserData(Color.LIGHTBLUE); 
tb3.setUserData(Color.SALMON); 

final Rectangle rect = new Rectangle(145, 50); 

final ToggleGroup group = new ToggleGroup(); 
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){ 

    public void changed(ObservableValue<? extends Toggle> ov, 
     Toggle toggle, Toggle new_toggle) { 
      if (new_toggle == null) 
       rect.setFill(Color.WHITE); 
      else 
       rect.setFill(
        (Color) group.getSelectedToggle().getUserData() 
       ); 
     } 
    }); 
+1

'輸入静的をjava.awt.Color *使用して、この

 Color newColor; if (new_toggle == null) newColor = Color.WHITE; else newColor = (Color) group.getSelectedToggle().getUserData(); rect.setFill(newColor); 

またはこのように書き換えることができ、エリオットが示すように、' –

+0

を。 :setUserData(Color.BLACK)をsetUserData(BLACK)に変更する場合は、これらの定数を静的にインポートするだけです。それを超えて:あなたの命名を見てください:*あなたは*ユーザーデータ*を設定してから色を渡すことができますか?このメソッドは、 'setDisplayColorForUser()'などと呼ばれるべきである。 – GhostCat

+3

@GhostCat、あなたはそれが本当の質問ですか?キャスティングを避ける方法についてこの質問はありませんか? –

答えて

2

setget-UserDataObject型を返す/取る程度のOracleドキュメントに基づいて

このライン

rect.setFill((Color) group.getSelectedToggle().getUserData() 

広いコード・フラグメント。

あなたは、私が質問を誤解していない限り、それらはToggleに定義されたプロパティであるので、その値を交換する方法があるように必要はありません(Color)へのキャストgroup.getSelectedToggle().getUserData()

で与えられる値を必要とします。..つまり、返される値は、そのToggleに対して前に定義されたColor.<VALUE>と等価です。

あなたのコードは、三元表現

rect.setFill(new_toggle == null ? Color.WHITE : (Color) group.getSelectedToggle().getUserData()); 
+0

私はこのステートメントの詳細を読むことができるソースを教えてください(カラー) - 私はドットなしのカッコでカラーを意味します。今まで私は色だけを満たしています。 (ドットで)インターネット上の記事を使用しています。だから私は標準的な色を使う可能性があるかどうか尋ねた。 (Color)の代わりの解決策として、これはドットが働かないステートメント(Color)をどのように裏付けるのに役立つだろうと信じています。 –

+0

問題の有無は問わない。あなたが調査する必要があることは**キャスティングと呼ばれます** –

+0

ドットのカラーは**静的変数**アクセスです。 'Color c =(Color)variable; 'の使用法は' variable'インスタンスを 'Color'オブジェクト型にキャストします** –

関連する問題