2012-03-16 15 views

Odpowiedz

27

Jednym z rozwiązań może być tak:

1) Utwórz plik CSS o nazwie "style.css" i zdefiniować selektor identyfikatora w nim:

#pane{ 
    -fx-background-image: url("background_image.jpg"); 
    -fx-background-repeat: stretch; 
    -fx-background-size: 900 506; 
    -fx-background-position: center center; 
    -fx-effect: dropshadow(three-pass-box, black, 30, 0.5, 0, 0); 
} 

2) Ustaw id najbardziej górnym kontroli (lub żadnej kontroli) w scenie z wartości określonej w CSS i załadować ten plik CSS na scenie:

public class Test extends Application { 

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

    @Override 
    public void start(Stage primaryStage) { 
     StackPane root = new StackPane(); 
     root.setId("pane"); 
     Scene scene = new Scene(root, 300, 250); 
     scene.getStylesheets().addAll(this.getClass().getResource("style.css").toExternalForm()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

Można również przekazać identyfikator do kontroli w pliku FXML:

<StackPane id="pane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="demo.Sample"> 
    <children> 
    </children> 
</StackPane> 

Aby uzyskać więcej informacji na temat JavaFX CSS Stylizacja odnoszą się do tego guide.

+0

zamieścić kolejne pytanie wcześniej proszę o pomoc tutaj link http://stackoverflow.com/questions/9736393/javafx-2 -nie-zmienianie rozmiaru-ui-oparte-na-oknie-rozmiar-rozmiar – John

+0

czy mogę zmienić tło sceny z innej funkcji, oprócz nieważnego startu – Ossama

+0

@Ossama tak, możesz. Zdefiniuj dwa różne selektory CSS (o dwóch różnych właściwościach tła) iw niektórych metodach zmień identyfikator węzła na pożądany. –

10

Można zmienić styl bezpośrednio na scenie używając .root klasę:

.root { 
    -fx-background-image: url("https://www.google.com/images/srpr/logo3w.png"); 
} 

Dodaj to do CSS i załadować go jako „Uluk Biy” opisanej w swojej odpowiedzi.

+0

Ups! Jak mogę sprawić, by obraz wypełnił całą scenę? Pozostawia białe przestrzenie po lewej i na górze. – John

+0

'-fx-background-repeat: stretch; ' –

+0

To wciąż pozostawia miejsce. Źródłem sceny jest GridPane, a ja skupiam siatkę na scenie. Jak mogę zapobiec wyśrodkowaniu obrazu tła? – John

19

wiem, że to jest stary Pytanie

Jednak w przypadku, gdy chcesz to zrobić programowo lub sposób java

Dla Tła obrazu; można użyć BackgroundImage klasę

BackgroundImage myBI= new BackgroundImage(new Image("my url",32,32,false,true), 
     BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, 
      BackgroundSize.DEFAULT); 
//then you set to your node 
myContainer.setBackground(new Background(myBI)); 

do malowania lub Fill Tła; można użyć BackgroundFill klasa

BackgroundFill myBF = new BackgroundFill(Color.BLUEVIOLET, new CornerRadii(1), 
     new Insets(0.0,0.0,0.0,0.0));// or null for the padding 
//then you set to your node or container or layout 
myContainer.setBackground(new Background(myBF)); 

Utrzymuje java żyje & & Twój css martwy ..