2013-04-25 132 views
1

mainClass.java:JavaFX的場景CSS不工作

public class mainClass extends Application{ 
    Scene scene; 
    Group group; 
    @Override 
    public void start(Stage stg) throws Exception{ 
     stg.setTitle("Hi"); 
     stg.setWidth(600); stg.setHeight(250); 
     group = new Group(); 
     scene = new Scene(group, 600, 250); 
      scene.getStylesheets().add("mainClass.css"); 
     stg.setScene(scene); 
     stg.centerOnScreen(); 
     stg.show(); 
    } 

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

mainClass.css

.mainClass-scene{ 
    -fx-background-image: url("background.jpeg"); 
    -fx-background-repeat: stretch; 
    -fx-background-size: 600 250; 
    -fx-background-position: center center; 
    -fx-effect: dropshadow(three-pass-box, black, 30, 0.5, 0, 0); 
} 

應用正常工作我顯示我的框架,但我對scene.Maybe CSS不能鋸背景圖像不工作怎麼樣我可以解決這個問題?

Sory爲我不好的英語謝謝。

回答

3

您的程序有許多問題。

  1. 您定義了一個樣式類mainClass-scene但從來沒有使用它。
  2. 您使用的css -fx-background-image屬性僅適用於Regions,但您沒有任何區域。
  3. 您應用陰影效果,但不要在背景圖像周圍留下任何暗影以使陰影可見。
  4. 您將舞臺大小設置爲與場景大小相同的值,但舞臺上有裝飾物,就像標題欄等一樣,因此它不能具有相同的大小。
  5. 通常最好將css文件作爲類資源進行檢索。

poison

這裏是一個更新的版本,這對我的作品,併產生上面的圖片。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class MainClass extends Application{ 
    @Override public void start(Stage stage) throws Exception{ 
    stage.setTitle("Hi"); 

    StackPane layout = new StackPane(); 
    layout.getStylesheets().add("mainClass.css"); 
    layout.getStyleClass().add("main-class"); 

    Scene scene = new Scene(layout, 600, 250); 
    scene.getStylesheets().add(
     getClass().getResource("mainClass.css").toExternalForm() 
    ); 
    stage.setScene(scene); 
    stage.setResizable(false); 
    stage.centerOnScreen(); 
    stage.show(); 
    } 

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

相關CSS:

/** 
* file: mainClass.css 
* Place in same directory as MainClass.java. 
* Have your build system copy this file to your build output directory. 
**/ 

.main-class { 
    -fx-background-image: url('http://icons.iconarchive.com/icons/mirella-gabriele/fantasy-mediaeval/256/Poison-blue-icon.png'); 
    -fx-background-repeat: stretch; 
    -fx-background-size: 570 220; 
    -fx-background-position: center center; 
    -fx-effect: dropshadow(three-pass-box, black, 30, 0.5, 0, 0); 
    -fx-background-insets: 30; 
} 
+0

OOW真棒工作不錯,但我有新的問題:(我在stackpane添加按鈕,我想使用特定cordinates;例如:setLayoutX(100)不是。工作 – kibar 2013-04-25 22:46:22

+0

StackPane是一個[佈局管理器](http://docs.oracle.com/javafx/2/layout/builtin_layouts.htm),這意味着它管理它的孩子的佈局值,所以你沒有明確地設置它們如果你想顯式設置佈局值並在父組件上使用css,可以使用[Pane](http://docs.oracle.com/javafx/2/api/javafx/scene/layout/Pane.html)而不是'StackPane',也可以試試[SceneBuilder](http://www.oracle.com/technetwork/java/javafx/tools/index.html) - 它會幫助您更好地理解佈局。請在新問題中提出新問題。 – jewelsea 2013-04-25 22:56:57

+0

謝謝你的幫助,我理解;) – kibar 2013-04-25 23:01:16