Java SwingにはGridLayout
があり、3X4などのウィジェットの配列のサイズを指定できます。ウィジェットは、占有しているパネルを埋める。 JavaFXでどのように同様の効果を得ますか?javafxグリッドパネルを埋めるためのボタンを取得するにはどうすればよいですか?
5
A
答えて
15
グリッドペインにあるセルに割り当てられたスペースをどのようにノードに埋め込むかを尋ねていると思います。
これを行うにはいくつかの方法があります。あなたは、どちらかのノードにGridPane
固有のプロパティ設定を適用するには、静的GridPane
メソッドを使用することができます。
GridPane grid = new GridPane();
for (int rowIndex = 0; rowIndex < numRows; rowIndex++) {
RowConstraints rc = new RowConstraints();
rc.setVgrow(Priority.ALWAYS) ; // allow row to grow
rc.setFillHeight(true); // ask nodes to fill height for row
// other settings as needed...
grid.getRowConstraints().add(rc);
}
for (int colIndex = 0; colIndex < numColumns; colIndex++) {
ColumnConstraints cc = new ColumnConstraints();
cc.setHgrow(Priority.ALWAYS) ; // allow column to grow
cc.setFillWidth(true); // ask nodes to fill space for column
// other settings as needed...
grid.getColumnConstraints().add(cc);
}
:
GridPane.setFillWidth(myButton, true);
GridPane.setFillHeight(myButton, true);
他の方法は、グリッド・ペイン自体に列制約と列制約を指定することですいずれの場合も、グリッド・ペインが成長する要求を尊重するために、ノードを大きくする必要があります。ですから、例えば:(行と列の制約メソッドを使用して)
Button myButton = new Button("Click");
myButton.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
grid.add(myButton, 0, 0);
SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.stage.Stage;
public class KeyPad extends Application {
@Override
public void start(Stage primaryStage) {
GridPane grid = new GridPane();
int numRows = 4 ;
int numColumns = 3 ;
for (int row = 0 ; row < numRows ; row++){
RowConstraints rc = new RowConstraints();
rc.setFillHeight(true);
rc.setVgrow(Priority.ALWAYS);
grid.getRowConstraints().add(rc);
}
for (int col = 0 ; col < numColumns; col++) {
ColumnConstraints cc = new ColumnConstraints();
cc.setFillWidth(true);
cc.setHgrow(Priority.ALWAYS);
grid.getColumnConstraints().add(cc);
}
for (int i = 0 ; i < 9 ; i++) {
Button button = createButton(Integer.toString(i+1));
grid.add(button, i % 3, i/3);
}
grid.add(createButton("#"), 0, 3);
grid.add(createButton("0"), 1, 3);
grid.add(createButton("*"), 2, 3);
Scene scene = new Scene(grid);
primaryStage.setScene(scene);
primaryStage.show();
}
private Button createButton(String text) {
Button button = new Button(text);
button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
button.setOnAction(e -> System.out.println(text));
return button ;
}
public static void main(String[] args) {
launch(args);
}
}
-3
JavaFXでGridPaneを使用できます。これは、最初の行とGridPaneの最初の列にラベルを追加するJavaコードで、あなたは
GridPane pane = new GridPane();
ことによってそれを作成することができますし、
Label label = new Label();
pane.add(label, 0,0);
のように、たとえば、これに別のノードを追加します。 より複雑なGUIの場合は、SceneBuilderを使用できます。
+1
私は、グリッドペインに物事を追加する方法を知っています。私がしたいことは、グリッドペインが占める領域を完全に埋めるために、ボタンの配列を言うことです。 – ncmathsadist
優秀!ありがとう! +1して受け入れる。 – ncmathsadist
CSSで行うには(私の場合、maxwidth infinityを設定すれば十分でした) '.mygridPane Button { \t -fx-max-width:infinity; } ' – pdem