I am working on a grammar analysis program. I am using a GridPane
and have three TextArea
s so far. The TextArea
paliVerse
should span over two rows; the TextArea
analysis
over four. However, when I change the TextArea
analysis
with
gridPane.add(analysis,2,1,4,1);
analysis.setPrefRowCount(4);
the TextArea
paliVerse
also spans over rows, even though the PrefRowCount
is 2:
How can I change this so that it looks like:
This is the relevant code:
package com.example.projektver180523;
import java.sql.*;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class HelloApplication extends Application {
private ComboBox<Integer> comboBox;
private TextArea paliVerse;
private TextArea paliVerseGER;
private TextArea analysis;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws SQLException {
// Erstelle die ComboBox
comboBox = new ComboBox<>();
// Fülle die ComboBox automatisch
fillComboBox();
// Erstelle die TextAreas
paliVerse = new TextArea();
paliVerseGER = new TextArea();
analysis = new TextArea();
// Textfeld ist unveränderlich
paliVerse.setEditable(false);
paliVerseGER.setEditable(false);
analysis.setEditable(false);
// 2 columns preferred
paliVerse.setPrefColumnCount(2);
paliVerseGER.setPrefColumnCount(2);
// // 2 rows preferred for paliVerse and German translation textArea
paliVerse.setPrefRowCount(2);
paliVerseGER.setPrefRowCount(2);
analysis.setPrefRowCount(4);
GridPane.setConstraints(comboBox, 0, 1);
GridPane gridPane = new GridPane();
// Abstand nach innen setzen
gridPane.setPadding(new Insets(10));
// horizontaler Abstand zwischen Kindern
gridPane.setHgap(10);
// vertikaler Abstand zwischen Kindern
gridPane.setVgap(10);
// Spalte 0 ist 150 weit
gridPane.getColumnConstraints().add(new ColumnConstraints(230));
// Spalte 0 ist 480 weit
gridPane.getColumnConstraints().add(new ColumnConstraints(600));
gridPane.add(new Label("Vers Nummer:"), 0, 0);
gridPane.add(comboBox, 1, 0);
gridPane.add(new Label("Palitext:"), 0, 1);
gridPane.add(paliVerse, 1, 1);
gridPane.add(new Label("Übersetzung Deutsch:"), 0, 2);
gridPane.add(paliVerseGER, 1, 2);
gridPane.add(new Label("Analyse:"), 2, 0);
gridPane.add(analysis, 2, 1, 4, 1);
Scene scene = new Scene(gridPane, 1200, 400);
// Verknüpfe CSS-Datei
scene.getStylesheets().add("styles.css");
// Zeige das Hauptfenster an
stage.setTitle("Dhammapada Reader");
stage.setScene(scene);
stage.show();
}
}
You seem to be making this more complicated than it needs to be. Each cell in GridPane
will be sized to accomodate the Node
it contains, as stated in the class documentation:
By default, rows and columns will be sized to fit their content; a column will be wide enough to accommodate the widest child, a row tall enough to fit the tallest child.
So all you need do is explicitly set the row span for [TextArea
] analysis
to 2 (two).
Consider the following code:
(Note that the actual contents of the ComboBox
is irrelevant to your question so the below code does not populate the ComboBox
. Besides, your question doesn't contain the code for method fillComboBox
anyway.)
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class HelloApplication extends Application {
private ComboBox<Integer> comboBox;
private TextArea paliVerse;
private TextArea paliVerseGER;
private TextArea analysis;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
comboBox = new ComboBox<>();
paliVerse = new TextArea();
paliVerseGER = new TextArea();
analysis = new TextArea();
GridPane gridPane = new GridPane();
gridPane.setPadding(new Insets(10));
gridPane.setHgap(10);
gridPane.setVgap(10);
gridPane.add(new Label("Vers Nummer:"), 0, 0);
gridPane.add(comboBox, 1, 0);
gridPane.add(new Label("Palitext:"), 0, 1);
gridPane.add(paliVerse, 1, 1);
gridPane.add(new Label("Übersetzung Deutsch:"), 0, 2);
gridPane.add(paliVerseGER, 1, 2);
gridPane.add(new Label("Analyse:"), 2, 0);
gridPane.add(analysis, 2, 1, 1, 2);
Scene scene = new Scene(gridPane, 1200, 400);
// Zeige das Hauptfenster an
stage.setTitle("Dhammapada Reader");
stage.setScene(scene);
stage.show();
}
}
This is how it looks: