2017-02-02 19 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; 
} 
相关问题