2012-03-16 18 views

risposta

27

Uno degli approcci può essere simile a questo:

1) Creare un file CSS con il nome "style.css" e definire un selettore id in essa:

#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) Imposta l'id del controllo più alto (o qualsiasi controllo) nella scena con valore definito in CSS e carica questo file CSS nella scena:

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(); 
    } 
} 

Si può anche dare un id al controllo in un file FXML:

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

Per ulteriori informazioni su JavaFX CSS Styling si riferiscono a questo guide.

+0

ho posto un'altra domanda in precedenza si prega di aiutare collegamento qui http://stackoverflow.com/questions/9736393/javafx-2 -not-resizing-ui-control-based-on-window-size – John

+0

posso cambiare lo sfondo della scena da un'altra funzione, oltre all'avvio nullo – Ossama

+0

@Ossama sì è possibile. Definire due diversi selettori CSS (con due diverse proiezioni di background) e in qualche modo cambiare l'id del nodo con quello desiderato. –

10

È possibile modificare lo stile direttamente scena utilizzando .root classe:

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

aggiungere questo al CSS e caricarlo come "Uluk Biy" descritto nella sua risposta.

+0

Oops! Come posso fare in modo che l'immagine riempia l'intera scena? Lascia gli spazi bianchi a sinistra e in alto. – John

+0

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

+0

Sta ancora lasciando spazio. La radice della scena è una GridPane e sto centrando griglia sulla scena. Come posso evitare che l'immagine di sfondo sia centrata? – John

19

So che questa è una vecchia questione

Ma nel caso in cui si vuole fare a livello di codice o il modo in java

Per Gli Sfondi immagine; è possibile utilizzare BackgroundImage classe

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)); 

Per Paint o Riempire Sfondi; è possibile utilizzare BackgroundFill classe

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)); 

Mantiene il vostro java vivo & & tuo css morti ..

Problemi correlati