我使用以下代码为计算器创建一个简单的按钮网格:
BorderPane rootNode = new BorderPane();
GridPane gridPane = new GridPane();
rootNode.setCenter(gridPane);
int counter = 1;
for(int row = 3; row > 0; row--)
for(int col = 0; col < 3; col++) {
Button button = new Button("" + counter++);
button.setOnAction(this);
gridPane.add(button, col, row);
}
gridPane.add(new Button("R"), 0, 4);
gridPane.add(new Button("0"), 1, 4);
(想发布一张图片,看看它在这里的样子,但我没有足够的声望点可以这样做)
GridPane最终变得很小并且塞满了左上角,但我希望它占据BorderPane中心区域的所有可用空间(在这种情况下,这将是整个窗口)。我已经尝试过使用各种setSize方法等一些东西搞乱,但是他们运气不错。
答案 0 :(得分:2)
您的GridPane
已占用了所有可用空间,即整个Borderpane
。它的GridCells没有使用GridPane可用的空间。
您可以使用GridPane中提供的Hgrow
和Vgrow
选项,使单元格占用整个可用空间。
以下示例使用setHgrow
来使用GridPane可用的整个宽度。您可以为高度添加相同的内容。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
BorderPane rootNode = new BorderPane();
rootNode.setMinSize(300, 300);
rootNode.setStyle("-fx-background-color: RED;");
GridPane gridPane = new GridPane();
gridPane.setStyle("-fx-background-color: BLUE;");
rootNode.setCenter(gridPane);
int counter = 1;
for (int row = 3; row > 0; row--)
for (int col = 0; col < 3; col++) {
Button button = new Button("" + counter++);
gridPane.add(button, col, row);
GridPane.setHgrow(button, Priority.ALWAYS);
}
Button r = new Button("R");
gridPane.add(r, 0, 4);
GridPane.setHgrow(r, Priority.ALWAYS);
Button r0 = new Button("0");
gridPane.add(r0, 1, 4);
GridPane.setHgrow(r0, Priority.ALWAYS);
Scene scene = new Scene(rootNode);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
答案 1 :(得分:0)
抱歉,我误解了这个问题。
按钮太小了,所以不占用边框中的所有空间?按钮的宽度取决于其具有的文本大小。你只需在其中写一个数字,这样它们就相当小了。使用button.setPrefWidth(Integer.MAX_VALUE),他们使用他们可以获得的所有宽度!