JavaFX HBox und BorderPane..

ostylk

Mitglied
Hey,
ich bin noch recht neu in JavaFX, deshalb ist das wahrscheinlich ein ziemlich dummer Fehler.
Aber ich möchte ein Programm machen was so in 3 Teile unterteilt ist...
Ganz oben kommt eine MenuBar hin(ist schon erledigt). In die Mitte kommen 2 TextAreas und ganz nach Unten soll noch eine Art Statusbar hinkommen..
Also erstellte ich mir eine BorderPane und packte meine Statusbar(HBox mit einem Label drinn) in den Bottom-Part der BorderPane und für die 2 TextAreas erstellte ich eine HBox mit den 2 TextAreas drinne und packte es in den Center-Part der BorderPane mit der Hoffnung das es funktioniert :D.
Java:
        TextArea editor = new TextArea();
        
        TextArea editor2 = new TextArea();
        
        HBox content = new HBox();
        content.setStyle("-fx-background-color: #0000FF;");
        content.getChildren().addAll(editor, editor2);
        
        Label compileStatus = new Label("Successful compiled!");
        
        HBox statusbar = new HBox();
        statusbar.setPadding(new Insets(5, 5, 5, 5));
        statusbar.setStyle("-fx-background-color: #00FF00;");
        statusbar.getChildren().add(compileStatus);
        
        BorderPane prgmScene = new BorderPane();
        prgmScene.setCenter(content);
        prgmScene.setBottom(statusbar);
        
        //Layout
        VBox layout = new VBox();
        layout.getChildren().addAll(menubar, prgmScene);
Hat aber nicht so ganz funktioniert wie ich es mir vorgestellt habe..
Die zwei TextAreas wurden zwar nebeneinander platziert skalieren sich aber nicht, somit füllen sie nicht den ganzen Bildschirm. Anscheinend wurde die HBox im Center dann auch nur so groß gemacht wie der Inhalt und somit wurde die Statusbar auch irgendwo oben platziert obwohl sie ganz nach unten soll...
Unbenannt.PNG
So jetzt meine Frage:
Wie kann ich die HBox mit den 2 TextAreas so machen das sie den ganzen verfügbaren Platz im Fenster ausnutzt und entsprechend skaliert und Statusbar immer unten bleibt?
Hier nochmal der ganze Code von meiner start() Methode inkl. der Code zur MenuBar
Java:
private Stage window;
private Scene scene;

@Override
public void start(Stage primaryStage) throws Exception {
	window = primaryStage;
        window.setTitle("JavaFX prgm");

        saveIcon = new Image(getClass().getClassLoader().getResourceAsStream("res/save_edit.png"));
        exitIcon = new Image(getClass().getClassLoader().getResourceAsStream("res/exit.png"));
        
        //Creating Menubar\\
        /**/
        /**/MenuBar menubar = new MenuBar();
        /**/
        /**//**/Menu file = new Menu("File");
        /**//**//**/MenuItem newFile = new MenuItem("New");
        /**//**//**/newFile.setAccelerator(KeyCombination.keyCombination("Ctrl+N"));
        /**//**//**/
        /**//**//**/MenuItem openFile = new MenuItem("Open");
        /**//**//**/openFile.setAccelerator(KeyCombination.keyCombination("Ctrl+O"));
        /**//**//**/
        /**//**//**/MenuItem closeFile = new MenuItem("Close");
        /**//**//**/closeFile.setAccelerator(KeyCombination.keyCombination("Ctrl+W"));
        /**//**//**/
        /**//**//**/MenuItem saveFile = new MenuItem("Save");
        /**//**//**/saveFile.setGraphic(new ImageView(saveIcon));
        /**//**//**/saveFile.setAccelerator(KeyCombination.keyCombination("Ctrl+S"));
        /**//**//**/
        /**//**//**/MenuItem exitPrgm = new MenuItem("Exit");
        /**//**//**/exitPrgm.setOnAction(e -> window.close());
        /**//**//**/exitPrgm.setGraphic(new ImageView(exitIcon));
        /**//**//**/
        /**//**/file.getItems().addAll(newFile, openFile, new SeparatorMenuItem() ,closeFile, new SeparatorMenuItem(), saveFile, new SeparatorMenuItem(), exitPrgm);
        /**/
        /**//**/Menu edit = new Menu("Edit");
        /**/
        /**/menubar.getMenus().addAll(file, edit);
        /**/
        //End creating menubar\\
        
        TextArea editor = new TextArea();
        
        TextArea editor2 = new TextArea();
        
        HBox content = new HBox();
        content.setStyle("-fx-background-color: #0000FF;");
        content.getChildren().addAll(editor, editor2);
        
        Label compileStatus = new Label("Successful compiled!");
        
        HBox statusbar = new HBox();
        statusbar.setPadding(new Insets(5, 5, 5, 5));
        statusbar.setStyle("-fx-background-color: #00FF00;");
        statusbar.getChildren().add(compileStatus);
        
        BorderPane prgmScene = new BorderPane();
        prgmScene.setCenter(content);
        prgmScene.setBottom(statusbar);
        
        //Layout
        VBox layout = new VBox();
        layout.getChildren().addAll(menubar, prgmScene);

        scene = new Scene(layout, 1000, 600);
        window.setScene(scene);
        window.show();
}

MfG ostylk
 

MichaProgs

Aktives Mitglied
Hi ostylk,

ich konnte es mit FXML lösen. Keine Ahnung wieso es bei dir nicht funktioniert hat. Hier der Code:

Java:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.Label?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1">
	<top>
		<MenuBar>
			<menus>
				<Menu text="File" />
			</menus>
		</MenuBar>
	</top>
	<center>
		<HBox>
			<children>
				<TextArea />
				<TextArea />
			</children>
		</HBox>
	</center>
	<bottom>
		<HBox>
			<Label text="Compiled!" />
		</HBox>
	</bottom>
</BorderPane>

Java:
package blubb;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Javaforum extends Application{

	private Stage window;
	private Scene scene;
	 
	public void start(Stage primaryStage) throws Exception {
			window = primaryStage;
	        window.setTitle("JavaFX prgm");
	 
	        FXMLLoader loader = new FXMLLoader(getClass().getResource("content.fxml"));
	        BorderPane content = new BorderPane();
	        content = loader.load();
	        scene = new Scene(content);
	        
	        window.setScene(scene);
	        window.show();
	}
	
	public static void main(String[] args){
		launch(args);
	}
	
}
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    21 KB · Aufrufe: 52

ostylk

Mitglied
@TB94
Erstmal tut mir leid das ich erst so spät antworte, aber ich habe noch ein bisschen rumexperimentiert und es hat mit FXML auch ohne Probleme funktioniert, aber es geht nur bis zur einer bestimmten Breite dann scheinen die TextAreas sich nicht mehr weiter zu skalieren und das obwohl ich keine maximum width eingestellt habe. Kann man das auch irgendwie lösen?
Code:
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>

<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuItem?>

<?import javafx.scene.control.SeparatorMenuItem?>

<?import javafx.scene.control.TextArea?>[ATTACH=CONFIG]7701[/ATTACH]
<?import javafx.scene.control.Label?>
<?import javafx.geometry.Insets?>
<BorderPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml">

    <top>
        <MenuBar>
            <menus>
                <Menu text="File">
                    <items>
                        <MenuItem text="New"/>
                        <MenuItem text="Open"/>
                        <MenuItem text="Save"/>
                        <MenuItem text="Save As"/>
                        <SeparatorMenuItem/>
                        <MenuItem text="Exit"/>
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>

    <center>
        <HBox>
            <TextArea/>
            <TextArea/>
        </HBox>
    </center>

    <bottom>
        <HBox>
            <padding><Insets top="10" right="20" bottom="10" left="10"/></padding>
            <Label text="Successful compiled"/>
        </HBox>
    </bottom>
</BorderPane>
Bildschirmfoto 2015-04-30 um 21.38.34.jpg
 
Zuletzt bearbeitet:

MichaProgs

Aktives Mitglied
Guten Morgen,

hab mich eben nochmal an die Sache hingesetzt. Das scheint wohl an der HBox zu liegen, die im Center des BorderPanes liegt. Tausch die HBox mal gegen ein SplitPane aus (wäre sowieso praktischer, dann kann man die beiden TextAreas schön anpassen):

Java:
<center>
	<SplitPane>
		<TextArea />
		<TextArea />
	</SplitPane>
</center>

Gruß
TB94
 

Tom299

Bekanntes Mitglied
Normalerweise liegt das Problem immer an den Min,Max und Pref-Size Werten der Komponenten. Mit dem SceneBuilder kann man das eigentlich ganz gut ausprobieren (FXML).
Ich bau meine GUI meistens am Anfang auch erst mal auf die "Arbeitsgröße" (z.B. 800*600) und erst später überlege ich dann, wie meine Komponenten auf Maximieren bzw. Resize reagieren sollen. Wenn deine beiden Textareas immer gleich groß sein sollen, hätte ich vermutlich eine GridPane genommen und die so eingestellt, daß beide Columns 50% haben und dann die Textareas in die beiden Columns gelegt. Aber oft gibt es mehr als 1 Möglichkeit,
 

Ähnliche Java Themen

Neue Themen


Oben