2017-02-02 17 views
0

我正在嘗試使殘疾人ListView看起來與未禁用的ListView相同。如何更改JavaFX中已禁用ListView的樣式?

我查了一下,發現你必須設置不透明度爲1,嘗試了很多方法,有和沒有樣式表,但似乎沒有任何工作。我曾嘗試:

listView.setStyle("-fx-opacity: 1.0;"); 

.listView:disabled { 
    -fx-opacity: 1.0; 
} 

.listView .list-cell { 
    -fx-opacity: 1.0; 
} 

.listView .list-cell:disabled { 
    -fx-opacity : 1.0; 
} 

我自己也嘗試設置背景色爲白色,但是這使得文本invisble出於某種原因,即使沒有其他顏色的做到這一點。我會如何去做這件事?謝謝。

+0

你能解釋一下多一點你正在嘗試嘗試?什麼時候這個事件被解僱使它看起來被禁用了,你是否嘗試過設置不透明度?你可以設置'listView.setOpacity(1.0);' – TravisF

+0

也只是提及,如果你想使用外部CSS,你需要確保它在父節點上(最好放在根節點上),那麼你可以通過'listView.getStyleClass()。add(「definedClass」);'在外部CSS集合中設置樣式'.definedClass {-fx-opacity:1.0}'以防萬一你想設置一個通用的CSS。除此之外,如果通過SceneBuilder將其放到父節點上,則不能調用外部CSS,它必須通過'root.getStyleSheets()。add(「link」);' – TravisF

+0

@ TravFitzy用String而不是Label來替換項目,並使用setOpacity方法。謝謝! – conyare

回答

0

設置不透明度在disabled僞類(如你所提到的)應該是足夠了:

.list-view:disabled { 
    -fx-opacity: 1; 
} 

只是不要忘了樣式表添加到Scene

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

舉個例子:

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 

     BorderPane root = new BorderPane(); 
     Scene scene = new Scene(root, 400, 400); 
     scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

     ListView<String> lw = new ListView<>(); 
     lw.setItems(FXCollections.observableArrayList("dog", "cat", "whale")); 
     lw.setDisable(true); 
     root.setCenter(lw); 

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

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

和CSS選擇器包含在文件application.css,並將此文件放置在與Application類文件相同的目錄中。

注:如果你想擁有的選擇也看起來像一樣,你可以定義以下選擇也:

.list-cell:disabled, 
.list-cell:disabled, 
.list-view:disabled { 
    -fx-opacity: 1; 
} 
相關問題