2016-05-21 26 views
0

このAPIを作成中です。このログインクラスはGUIを作成するために必要なすべてのボックスを含むシーンを作成するだけです。私が持っている問題は、クリックしたときに私の形が何もしないということです。私はイベントリスナーを持っていますが、動作しません。クリック時のJavaFXシェイプ

import java.awt.Container; 
    import javafx.application.*; 
    import javafx.event.EventHandler; 
    import javafx.stage.*; 
    import javafx.scene.*; 
    import javafx.scene.layout.*; 
    import javafx.scene.paint.Color; 
    import javafx.scene.shape.Rectangle; 
    import javafx.scene.text.Font; 
    import javafx.scene.text.Text; 
    import javafx.scene.text.TextAlignment; 
    import javafx.scene.control.*; 
    import javafx.scene.image.Image; 
    import javafx.scene.image.ImageView; 
    import javafx.scene.input.MouseEvent; 

public class Login extends MainWindow { 
private Stage primaryStage; 
public static boolean ifContractor=false; 
public static boolean ifClient=false; 
private static Group root; 
private static ImageView iv; 

Login(){ 

} 
public static Scene loginScreen(){ 
    root = new Group(); 
    fillBackround(); 
    createShapes(); 
    System.out.println("I AM ROOT 3 : "+root); 

    Scene loginScene = new Scene(root, 1000,750); 
    return loginScene; 
} 
public static void fillBackround() { 
    Image loginBackround = new Image("loginBackround.jpg",true); 
    iv = new ImageView(); 
    iv.setImage(loginBackround); 
    root.getChildren().add(iv); 

} 
public static void createShapes() { 
    Group shapes = new Group(); 
    Rectangle mainBox = mainBox(); 
    Pane cornerBox = cornerBox(); 
    Pane clientBox = clientBox(); 
    Pane contractorBox = contractorBox(); 

    shapes.getChildren().addAll(mainBox,cornerBox,clientBox,contractorBox); 
    root.getChildren().add(shapes); 
} 
public static Rectangle mainBox() { 
    Rectangle mainBox = new Rectangle(350,100,300,500); 
    mainBox.setStroke(Color.BLUE); 
    mainBox.setFill(Color.DODGERBLUE); 
    mainBox.setStrokeWidth(3); 
    mainBox.setArcWidth(25); 
    mainBox.setArcHeight(25); 
    mainBox.setOpacity(0.5); 
    return mainBox; 

} 
public static Pane cornerBox() { 
    Rectangle cornerBox = new Rectangle(350,100,250,75); 
    cornerBox.setStroke(Color.BLUE); 
    cornerBox.setFill(Color.DODGERBLUE); 
    cornerBox.setStrokeWidth(3); 
    cornerBox.setArcWidth(25); 
    cornerBox.setArcHeight(25); 
    cornerBox.setOpacity(0.5); 
    Text cornerText = new Text(370,150, null); 
    cornerText.setFont(new Font(25)); 
    cornerText.setFill(Color.WHITESMOKE); 
    cornerText.setWrappingWidth(200); 
    cornerText.setTextAlignment(TextAlignment.JUSTIFY); 
    cornerText.setText("Login as: "); 
    Pane cornerStack = new Pane(); 
    cornerStack.getChildren().addAll(cornerBox,cornerText); 
    return cornerStack; 
} 
public static Pane clientBox() { 
    Rectangle clientBox = new Rectangle(400,300,200,75); 
    clientBox.setStroke(Color.BLUE); 
    clientBox.setFill(Color.DODGERBLUE); 
    clientBox.setStrokeWidth(3); 
    clientBox.setArcWidth(25); 
    clientBox.setArcHeight(25); 
    clientBox.setOnMousePressed(new EventHandler<MouseEvent>() 
    { 
     @Override 
     public void handle(MouseEvent t) { 
      ifClient = true; 
      System.out.println("Has been clicked"); 
     } 
    }); 
    Text clientText = new Text(450,350, null); 
    clientText.setFont(new Font(25)); 
    clientText.setFill(Color.WHITESMOKE); 
    clientText.setWrappingWidth(200); 
    clientText.setTextAlignment(TextAlignment.JUSTIFY); 
    clientText.setText("CLIENT"); 
    Pane clientStack = new Pane(); 
    clientStack.getChildren().addAll(clientBox,clientText); 
    return clientStack; 
} 
public static Pane contractorBox() { 
    Rectangle contractorBox = new Rectangle(400,400,200,75); 
    contractorBox.setStroke(Color.BLUE); 
    contractorBox.setFill(Color.DODGERBLUE); 
    contractorBox.setStrokeWidth(3); 
    contractorBox.setArcWidth(25); 
    contractorBox.setArcHeight(25); 
    Text contractorText = new Text(415,450, null); 
    contractorText.setFont(new Font(25)); 
    contractorText.setFill(Color.WHITESMOKE); 
    contractorText.setWrappingWidth(200); 
    contractorText.setTextAlignment(TextAlignment.JUSTIFY); 
    contractorText.setText("CONTRACTOR"); 
    Pane contractorStack = new Pane(); 
    contractorStack.getChildren().addAll(contractorBox,contractorText); 
    return contractorStack; 
} 

} 
+0

ようこそStackOverflow。あなたの質問には例があるのは良いスタートですが、これらのタイプの質問に対して実行可能でなければなりません。最小限の、完全で検証可能な例を投稿する方法を見てください(http://stackoverflow.com/help/mcve)。 – hotzst

答えて

1

問題はお使いのPanesが重なっていることです。これを呼び出すと:(ペイン)で

shapes.getChildren().addAll(mainBox,cornerBox,clientBox,contractorBox); 

contractorBoxは、クリックイベントのすべてを消費し、一番上になります。

代わりに、すべての方法で同じペインを使用する必要があります。 cornerBox、例えば、その後

private static Pane pane = new Pane(); 

:そのために、あなたは次のようにメンバーを使用することができ

pane.getChildren().addAll(cornerBox,cornerText); 

これは、このケースのためのソリューションである、しかし:

このクラス全体が奇妙に見えます。なぜあなたはMainWindowを拡張していますか?意味がありません。また、なぜすべてが静的なのですか?

Parent(たとえばGroup)のクラスが必要です.Parentを必要なすべてのコントロールで塗りつぶし、親を返します。そして、あなたはそれがどこでもあなたのようにしたいこと:あなたは長方形やテキストを描画している理由

Scene scene = new Scene(new Login()); 

また、私は理解していません。基本的に必要なのは2つのボタンです。 CSSを使用してボタンの外観を変更することができます:Example1Example2

+0

私は、ウィンドウ全体を作成するクラスDrawingpaneを持っています。メインウィンドウよりも、条件文に応じてシーンをロードします。メインウィンドウよりログイン時にクライアントボックスをクリックすると、新しいシーンが開きます。これが正直にそれを行う最善の方法であるかどうかわからない。 –

+0

現在の実装の解決策は上記の通りです。すべてのメソッドで新しいペインを作成するのではなく、cornerBox、clientBoxおよびcontractorBoxで同じペインを使用します。答えには、代わりにそれを実装する方法も含まれています:) – DVarga

+0

ありがとうございました! –

関連する問題