2017-01-26 6 views
0

sehr neu zu JavaFX Ich bin eine simple tutorial here Ich habe ein neues JavaFX-Projekt erstellt, aber es hat eine BorderPane als Standard und nicht ein StackPane, wie das Tutorial sagt, also habe ich es verlassen Dort. Die Anwendung hat nur eine Schaltfläche und wenn ich die BorderPane verwenden wird die Schaltfläche nicht angezeigt. Wenn ich es zu StackPane ändere, wird der Button angezeigt. In der Annahme, dass das BorderPane aus irgendeinem Grund etwas abgeschnitten hat, habe ich die Anwendungsfenster in voller Größe erstellt, aber ich konnte den Button immer noch nicht sehen. Hier ist der Code mit dem BorderPane derjenige, der nicht den Knopf angezeigt:Anwendung mit BorderPane zeigt keine einfache Schaltfläche

package application; 



import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.BorderPane; 


public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      BorderPane root = new BorderPane(); 
      Scene scene = new Scene(root,400,400); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setTitle("This is a test!"); 
      Button btn = new Button(); 
      btn.setText("Say 'Hello World'"); 
      btn.setOnAction(new EventHandler<ActionEvent>() { 

       @Override 
       public void handle(ActionEvent event) { 
        System.out.println("Hello World!"); 

       } 
      }); 
      root.getChildren().add(btn); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

Jede Idee?

+1

'root.getChildren() hinzufügen (BTN).' 'Sollte root.setCenter (BTN) sein;' ' – pzaenger

+0

BorderPane' Layout legt nur die fünf Knoten als' center' gesetzt, 'top', 'rechts',' unten' und 'links'. Sie müssen also eines davon erstellen oder ein anderes Layoutfenster verwenden. –

+0

Ah OK, danke. Ich habe diese Methoden angeschaut, aber ist der Button nicht ein Kind von root (das Panel)? Wenn ja, was ist falsch daran, alle Kinder (und in diesem Fall ein Kind) zu bekommen? – antobbo

Antwort

1

Werfen Sie einen Blick auf die Dokumentation zu BorderPane:

BorderPane legt Kinder in oben, links, rechts, unten und in der Mitte Positionen aus.

Daher müssen Sie Sachen verwenden wie:

borderPane.setTop(toolbar); 
borderPane.setCenter(appContent); 
borderPane.setBottom(statusbar); 

In Ihrem Fall root.getChildren().add(btn);root.setCenter(btn); zum Beispiel sein sollte.

+0

OK danke Jungs, ich verstehe jetzt, es ergibt Sinn – antobbo

Verwandte Themen