2014-09-19 33 views
1

我想做一個面向對象的JavaFX程序,但我遇到了一個問題,我似乎無法修復,基本上窗口變量都設置了,當我將它們打印到控制檯時,他們都設置了,但是當我來在啓動方法中使用它們似乎並不承認它們在那裏。爲什麼我的程序不使用變量?

主要類:

import com.mersey.ui.Window; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     Window win = new Window(); 

     win.Create("Mersey", 980, 640, false); 
     Window.launch(Window.class, args); 
    } 
} 

窗口類:

package com.mersey.ui; 

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

public class Window extends Application 
{ 
    protected Stage WindowStage; 
    protected Pane WindowRoot; 
    protected Scene WindowScene; 
    protected String WindowTitle; 
    protected int  WindowWidth; 
    protected int  WindowHeight; 
    protected boolean WindowResizable; 

    public void Create(String title, int width, int height, boolean resizable) 
    { 
     WindowTitle  = title; 
     WindowWidth  = width; 
     WindowHeight = height; 
     WindowResizable = resizable; 

     /* 
     System.out.print(WindowTitle+"\n"); 
     System.out.print(WindowWidth+"\n"); 
     System.out.print(WindowHeight+"\n"); 
     System.out.print(WindowResizable);*/ 
    } 

    @Override 
    public void start(Stage stage) throws Exception 
    { 
     WindowStage = stage; 
     WindowRoot = new Pane(); 
     WindowScene = new Scene(WindowRoot, WindowWidth, WindowHeight); 
     WindowStage.setScene(WindowScene); 

     WindowStage.setTitle(WindowTitle); 
     WindowStage.setWidth(WindowWidth); 
     WindowStage.setHeight(WindowHeight); 
     WindowStage.setMinWidth(WindowWidth); 
     WindowStage.setMinHeight(WindowHeight); 
     WindowStage.setResizable(WindowResizable); 

     WindowStage.show(); 
    } 
} 
+0

備註 - 將您的變量命名爲小寫字母。像'windowRoot'或'windowWidth'。 – csmckelvey 2014-09-19 17:15:36

+0

我認爲它可能與這一行有關:Window.launch(Window.class,args);我不知道你正在使用這個api,但是這看起來似乎並沒有將你創建的Window實例傳遞給Window.launch方法,而是調用Create()方法,這意味着它可能啓動一個新創建的實例,而不是你的實例已經建成。 – 2014-09-19 17:51:41

回答

0

我覺得*什麼youre會想在這裏做,不構成Window對象,然後調用Window.launch的方式你現在是,但是相反,通過傳遞到Window.launch的String []參數來獲取寬度高度值。該文件說,你可以然後通過getParameters()retreive這些值,所以它會是這個樣子:

//in main 
String[] launchArgs = new String[] {"Width=800", "Height=600"}; 
Window.launch(Window.class, launchArgs); 

.......................... 


//in start(Stage) 

String[] args = getParameters(); 
for (String s : args) { 
    if (s.contains("Width")) { 
     //parse and set the window width here 
    } 
} 

看到這個:http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#launch(java.lang.Class,java.lang.String中...)

當然,這假定你希望能夠在main中提供這些類字段的任意值。如果不是,我只需要編寫一個默認值,或者從start(Stage)方法中的配置中將它們拉出來。

+0

好的,謝謝你的幫助,我現在就來看看。 – Callum 2014-09-19 18:17:22

相關問題