2016-04-07 13 views
0

私は、テーブルのクラス内のエントリのさまざまな属性を表示し、セカンダリ入力ウィンドウから新しいエントリを追加できるようにする単純なオブジェクトデータベースアプリケーションを開発中です。JavaFX FXMLアプリの奇妙な可視性の問題

メイン:二次のいずれかのウィンドウのための

public class Main extends Application { 

     Stage theStage; 
     Scene mainWindowController; 

     @Override 
     public void start(Stage primaryStage) throws Exception{ 
      theStage = primaryStage; 

      Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml")); 
      primaryStage.setTitle("Steam Database"); 

      mainWindowController = new Scene(root, 800, 550); 

      primaryStage.setScene(mainWindowController); 
      primaryStage.show(); 
     } 

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

コントローラ:

import static sample.MainWindowController.*; 

public class CreateDeveloperWindowController { 
/* 
*/ 
@FXML 
private TextField newDeveloperNameTextField; 

@FXML 
private TextField newDeveloperPassTextField; 

    private void handleCreateDeveloperButton() { 
     String proposedNewDevName = newDeveloperNameTextField.getText(); 
     String proposedNewDevPass = newDeveloperPassTextField.getText(); 
     if (proposedNewDevName.equals("") || proposedNewDevPass.equals("")) { 
      mainWindowController.textMessageDisplay.setText("Name and password must not be empty!"); 
     } else { 
      allDevelopers.add(new Developer(proposedNewDevName, proposedNewDevPass)); 
     } 

    } 
/* 
*/ 
} 

問題は、私は取得していますライン

mainWindowController.textMessageDisplay.setText("Name and password must not be empty!"); 

で、コントローラであります「シンボルを解決できません」というエラーが表示されますが、理由を識別できません。 1つの解決策は、「メイン」を追加することです。その前に変数staticを宣言しますが、それは追加したい他の機能に問題を引き起こします。だから私の質問は:

  1. なぜこれも表示されますか? mainWindowController変数はMainクラス内で宣言されているので、アプリケーションのどこからでも見ることができます。

  2. どうすれば解決できますか。その行をどのように動かすのですか?

+0

なので、エラーが発生します。 –

+0

しかし、CreateDeveloperWindowControllerはMainクラスでそれを見るべきではありませんか?私がそれをインポートしても、静的コンテキストから参照することはできません "静的ではない変数を与える"エラーは、静的な変数を宣言することによって解決することができます。私が追加しようとしている他のものと同じように静的なので、 – Sargon1

+0

* "CreateDeveloperWindowControllerはメインクラスでそれを参照してはいけませんか?"それは単にJava(あるいは実際に私が知っている他の言語)がどのように動作するかではありません。 –

答えて

0

あなたは本当に間違っています。インスタンス変数と静的変数が混乱しています。 はとにかく、あなたが最初のクラスへの参照を取得する必要があり、ここでは `mainWindowController`と呼ばれるCreateDeveloperWindowController``で定義された変数が存在しない良い例 https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1