2013-07-04 54 views
6

我要像上面enter image description here 我是一個SWT開發者那裏經常拿這個小部件Switchbutton創建一個開關按鈕。 我可以在JavaFX的類似的東西如何創建JavaFX中一個開關按鈕?

+0

您可能想看看http://docs.oracle.com/javafx/2/api/javafx/scene/control/ToggleButton.html。我知道它不完全一樣,但基本上提供相同的功能。 –

回答

14

的第一個傾向是延長了JavaFX Label並添加Button作爲圖形和監聽SimpleBooleanProperty。設置該切換的Label的文字,風格和圖形內容對齊按鈕的ActionEvent處理程序。下面的代碼會讓你開始,你可以玩造型和邊界。

package switchbutton; 

import javafx.beans.property.SimpleBooleanProperty; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.control.Button; 
import javafx.scene.control.ContentDisplay; 
import javafx.scene.control.Label; 

public class SwitchButton extends Label 
{ 
    private SimpleBooleanProperty switchedOn = new SimpleBooleanProperty(true); 

    public SwitchButton() 
    { 
     Button switchBtn = new Button(); 
     switchBtn.setPrefWidth(40); 
     switchBtn.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent t) 
      { 
       switchedOn.set(!switchedOn.get()); 
      } 
     }); 

     setGraphic(switchBtn); 

     switchedOn.addListener(new ChangeListener<Boolean>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Boolean> ov, 
       Boolean t, Boolean t1) 
      { 
       if (t1) 
       { 
        setText("ON"); 
        setStyle("-fx-background-color: green;-fx-text-fill:white;"); 
        setContentDisplay(ContentDisplay.RIGHT); 
       } 
       else 
       { 
        setText("OFF"); 
        setStyle("-fx-background-color: grey;-fx-text-fill:black;"); 
        setContentDisplay(ContentDisplay.LEFT); 
       } 
      } 
     }); 

     switchedOn.set(false); 
    } 

    public SimpleBooleanProperty switchOnProperty() { return switchedOn; } 
} 
1

不能把這兩者結合在一起的兩個開關按鈕來完成(bind()的),其中每個按鈕獲得的它自己的CSS樣式?它實際上好像CSS將是棘手的(而且是可行的)部分得到的權利。

然後你只需讓你的應用程序聽取兩個實際上做你想要的切換按鈕?

+0

這是一個答案。答案是將兩個具有不同CSS樣式的切換按鈕綁定在一起。如果你覺得這是錯誤的,一個不好的做法,還是沒有用的,正確的行爲是downvote的答案,而不是將其刪除。 –

0

的控制FX項目提供了一個開關按鈕,像你所追求的。