【问题标题】:How to make Controls in FlowPane Grow with Windows Maximising如何使 FlowPane 中的控件随着 Windows 最大化而增长
【发布时间】:2018-04-29 00:21:56
【问题描述】:

Window in default size

然后

Window maximised

我创建了一个键来显示控件的包含:

Here

我希望 VBox 中的列表视图在保持比例的同时增长。

代码如下:

public class Modules extends BorderPane {

private Button Term1AddBtn, Term2AddBtn, Term2AddBtn, Term2RemoveBtn, ResetBtn, SubmitBtn;
private ListView Term1UnSelect, Term2UnSelect, Term1Select, Term2Select, YearSelect;
private TextField txtTerm1Cred, txtTerm1Cred;

public Modules() {
    FlowPane flowPane = new FlowPane(Orientation.VERTICAL);
    flowPane.setHgap(20);
    flowPane.setVgap(20);
    this.setPadding(new Insets(0, 10, 20, 10)); 

    Label lblTerm1UnSel = new Label("Unselected Term 1 Modules");
    Label lblTerm2UnSel = new Label("Unselected Term 2 Modules");
    Label lblTerm1Sel   = new Label("Selected Term 1 Modules");
    Label lblTerm2Sel   = new Label("Selected Term 2 Modules");
    Label lblYearSel   = new Label("Selected Year Long Modules");
    Label lblTerm1Btns  = new Label("Term 1:");
    Label lblTerm2Btns  = new Label("Term 2:");
    Label lblTerm1Cred  = new Label("Current Term 1 Credits:");
    Label lblTerm2Cred  = new Label("Current Term 2 Credits:");

    Term1UnSelect = new ListView();
    Term2UnSelect = new ListView();
    Term1Select = new ListView();
    Term2Select = new ListView();
    YearSelect = new ListView();
    Term1AddBtn  = new Button("Add");
    Term1RemoveBtn   = new Button("Remove");
    Term2AddBtn  = new Button("Add");
    Term2RemoveBtn   = new Button("Remove");
    ResetBtn    = new Button("Reset");
    SubmitBtn    = new Button("Submit");
    txtTerm1Cred = new TextField("0");
    txtTerm1Cred = new TextField("0");


    Term1UnSelect.setPrefSize(350, 100);
    Term2UnSelect.setPrefSize(350, 100);
    Term1Select.setPrefSize(350, 100);
    Term2Select.setPrefSize(350, 100);
    YearSelect.setPrefSize(350, 50);
    txtTerm1Cred.setMaxWidth(50);
    txtTerm1Cred.setMaxWidth(50);
    Term1AddBtn.setPrefWidth(70);
    Term1RemoveBtn.setPrefWidth(70);
    Term2AddBtn.setPrefWidth(70);
    Term2RemoveBtn.setPrefWidth(70);
    ResetBtn.setPrefWidth(70);
    SubmitBtn.setPrefWidth(70);

    VBox vboxTerm1Unsel = new VBox();
    VBox vboxTerm2Unsel = new VBox();
    VBox vboxTerm1Sel   = new VBox();
    VBox vboxTerm2Sel   = new VBox();
    VBox vboxYear   = new VBox();
    HBox hboxTerm1Btns  = new HBox();
    HBox hboxTerm2Btns  = new HBox();
    HBox hboxTerm1Cred  = new HBox();
    HBox hboxTerm2Cred  = new HBox();
    HBox hboxResetSubmit= new HBox();

    hboxTerm1Btns.setSpacing(20);
    hboxTerm2Btns.setSpacing(20);
    hboxTerm1Cred.setSpacing(20);
    hboxTerm2Cred.setSpacing(20);
    hboxResetSubmit.setSpacing(20);

    vboxTerm1Unsel.getChildren().addAll(lblTerm1UnSel, Term1UnSelect);
    vboxTerm2Unsel.getChildren().addAll(lblTerm2UnSel, Term2UnSelect);
    vboxTerm1Sel.getChildren().addAll(lblTerm1Sel, Term1Select);
    vboxTerm2Sel.getChildren().addAll(lblTerm2Sel, Term2Select);
    vboxYear.getChildren().addAll(lblYearSel, YearSelect);
    hboxTerm1Btns.getChildren().addAll(lblTerm1Btns, Term1AddBtn, Term1RemoveBtn);
    hboxTerm2Btns.getChildren().addAll(lblTerm2Btns, Term2AddBtn, Term2RemoveBtn);
    hboxTerm1Cred.getChildren().addAll(lblTerm1Cred, txtTerm1Cred);
    hboxTerm2Cred.getChildren().addAll(lblTerm2Cred, txtTerm1Cred);
    hboxResetSubmit.getChildren().addAll(ResetBtn, SubmitBtn);

    hboxTerm1Btns.setAlignment(Pos.CENTER);
    hboxTerm2Btns.setAlignment(Pos.CENTER);
    hboxTerm1Cred.setAlignment(Pos.CENTER);
    hboxTerm2Cred.setAlignment(Pos.CENTER);
    hboxResetSubmit.setAlignment(Pos.CENTER);

    flowPane.getChildren().addAll(vboxTerm1Unsel, hboxTerm1Btns, vboxTerm2Unsel, hboxTerm2Btns, hboxTerm1Cred, vboxYear, vboxTerm1Sel, vboxTerm2Sel, hboxTerm2Cred);

    BorderPane.setMargin(flowPane, new Insets(20));

    this.setCenter(flowPane);
    this.setBottom(hboxResetSubmit);

}

或者,如果可能的话,一种使控件保持相同格式的方法,如下所示:

Like so

必须绕过更多细节部分才能发布,对不起

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Nullam elementum laoreet tincidunt。整数简历 magna venenatis nibh blandit dignissim。暂停潜力。 Nunc velit est, congue dignissim diam et, rhoncus mattis quam。 Duis ultricies lectus vel mauris aliquet,nec ultrices augue vehicula。 Ut cursus fringilla ipsum。 Cras id feugiat metus。 Interdum et malesuada 在 faucibus 中以 ac ante ipsum primis 闻名。 Suspendisse vitae luctus risus。 Proin ut tempor turpis,非车辆 nunc。 Nam et sapien sit amet dui suscipit lacinia。

【问题讨论】:

  • 您需要发布您的View 代码。
  • 你可能不应该使用FlowPane
  • 这是用纯代码还是FXML完成的?
  • @Sedrick 纯代码,使用 MVC 方法,也添加了代码,省略了无关紧要的声明/分配
  • 您遗漏的代码很重要。我必须重新输入所有内容才能运行您的代码。

标签: java javafx


【解决方案1】:

我删除了您的FlowPane 并用HBox 替换它。

import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;

public class Modules extends BorderPane {
    private final Button Term1AddBtn, Term1RemoveBtn, Term2AddBtn, Term2RemoveBtn, ResetBtn, SubmitBtn;
    private final ListView Term1UnSelect, Term2UnSelect, Term1Select, Term2Select, YearSelect;
    private final TextField txtTerm1Cred;

    public Modules() {
        HBox rootHBox = new HBox();

        this.setPadding(new Insets(0, 10, 20, 10)); 

        Label lblTerm1UnSel = new Label("Unselected Term 1 Modules");
        Label lblTerm2UnSel = new Label("Unselected Term 2 Modules");
        Label lblTerm1Sel   = new Label("Selected Term 1 Modules");
        Label lblTerm2Sel   = new Label("Selected Term 2 Modules");
        Label lblYearSel   = new Label("Selected Year Long Modules");
        Label lblTerm1Btns  = new Label("Term 1:");
        Label lblTerm2Btns  = new Label("Term 2:");
        Label lblTerm1Cred  = new Label("Current Term 1 Credits:");
        Label lblTerm2Cred  = new Label("Current Term 2 Credits:");

        Term1UnSelect = new ListView();
        Term2UnSelect = new ListView();
        Term1Select = new ListView();
        Term2Select = new ListView();
        YearSelect = new ListView();
        Term1AddBtn  = new Button("Add");
        Term1RemoveBtn   = new Button("Remove");
        Term2AddBtn  = new Button("Add");
        Term2RemoveBtn   = new Button("Remove");
        ResetBtn    = new Button("Reset");
        SubmitBtn    = new Button("Submit");
        txtTerm1Cred = new TextField("0");


        Term1UnSelect.setPrefSize(350, 100);
        Term2UnSelect.setPrefSize(350, 100);
        Term1Select.setPrefSize(350, 100);
        Term2Select.setPrefSize(350, 100);
        YearSelect.setPrefSize(350, 50);
        txtTerm1Cred.setMaxWidth(50);
        txtTerm1Cred.setMaxWidth(50);
        Term1AddBtn.setPrefWidth(70);
        Term1RemoveBtn.setPrefWidth(70);
        Term2AddBtn.setPrefWidth(70);
        Term2RemoveBtn.setPrefWidth(70);
        ResetBtn.setPrefWidth(70);
        SubmitBtn.setPrefWidth(70);

        VBox vboxTerm1Unsel = new VBox();
        VBox vboxTerm2Unsel = new VBox();
        VBox vboxTerm1Sel   = new VBox();
        VBox vboxTerm2Sel   = new VBox();
        VBox vboxYear   = new VBox();
        HBox hboxTerm1Btns  = new HBox();
        HBox hboxTerm2Btns  = new HBox();
        HBox hboxTerm1Cred  = new HBox();
        HBox hboxTerm2Cred  = new HBox();
        HBox hboxResetSubmit= new HBox();

        hboxTerm1Btns.setSpacing(20);
        hboxTerm2Btns.setSpacing(20);
        hboxTerm1Cred.setSpacing(20);
        hboxTerm2Cred.setSpacing(20);
        hboxResetSubmit.setSpacing(20);

        vboxTerm1Unsel.getChildren().addAll(lblTerm1UnSel, Term1UnSelect);
        vboxTerm2Unsel.getChildren().addAll(lblTerm2UnSel, Term2UnSelect);
        vboxTerm1Sel.getChildren().addAll(lblTerm1Sel, Term1Select);
        vboxTerm2Sel.getChildren().addAll(lblTerm2Sel, Term2Select);
        vboxYear.getChildren().addAll(lblYearSel, YearSelect);
        hboxTerm1Btns.getChildren().addAll(lblTerm1Btns, Term1AddBtn, Term1RemoveBtn);
        hboxTerm2Btns.getChildren().addAll(lblTerm2Btns, Term2AddBtn, Term2RemoveBtn);
        hboxTerm1Cred.getChildren().addAll(lblTerm1Cred, txtTerm1Cred);
        hboxTerm2Cred.getChildren().addAll(lblTerm2Cred, txtTerm1Cred);
        hboxResetSubmit.getChildren().addAll(ResetBtn, SubmitBtn);

        hboxTerm1Btns.setAlignment(Pos.CENTER);
        hboxTerm2Btns.setAlignment(Pos.CENTER);
        hboxTerm1Cred.setAlignment(Pos.CENTER);
        hboxTerm2Cred.setAlignment(Pos.CENTER);
        hboxResetSubmit.setAlignment(Pos.CENTER);


        VBox leftVBox = new VBox(vboxTerm1Unsel, hboxTerm1Btns, vboxTerm2Unsel, hboxTerm2Btns, hboxTerm1Cred);
        leftVBox.setSpacing(5);
        VBox rightVBox = new VBox(vboxYear, vboxTerm1Sel, vboxTerm2Sel, hboxTerm2Cred);
        rightVBox.setSpacing(5);
        rootHBox.getChildren().addAll(leftVBox, rightVBox);
        rootHBox.setSpacing(5);
        rootHBox.setMaxSize(USE_PREF_SIZE, USE_PREF_SIZE);

        BorderPane.setAlignment(rootHBox, Pos.CENTER);
        this.setCenter(new StackPane(rootHBox));
        this.setBottom(hboxResetSubmit);

    }
}

这是一个加长版。

import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;

public class Modules extends BorderPane {
    private final Button Term1AddBtn, Term1RemoveBtn, Term2AddBtn, Term2RemoveBtn, ResetBtn, SubmitBtn;
    private final ListView Term1UnSelect, Term2UnSelect, Term1Select, Term2Select, YearSelect;
    private final TextField txtTerm1Cred;

    public Modules() {
        HBox rootHBox = new HBox();

        this.setPadding(new Insets(0, 10, 20, 10)); 

        Label lblTerm1UnSel = new Label("Unselected Term 1 Modules");
        Label lblTerm2UnSel = new Label("Unselected Term 2 Modules");
        Label lblTerm1Sel   = new Label("Selected Term 1 Modules");
        Label lblTerm2Sel   = new Label("Selected Term 2 Modules");
        Label lblYearSel   = new Label("Selected Year Long Modules");
        Label lblTerm1Btns  = new Label("Term 1:");
        Label lblTerm2Btns  = new Label("Term 2:");
        Label lblTerm1Cred  = new Label("Current Term 1 Credits:");
        Label lblTerm2Cred  = new Label("Current Term 2 Credits:");

        Term1UnSelect = new ListView();
        Term2UnSelect = new ListView();
        Term1Select = new ListView();
        Term2Select = new ListView();
        YearSelect = new ListView();
        Term1AddBtn  = new Button("Add");
        Term1RemoveBtn   = new Button("Remove");
        Term2AddBtn  = new Button("Add");
        Term2RemoveBtn   = new Button("Remove");
        ResetBtn    = new Button("Reset");
        SubmitBtn    = new Button("Submit");
        txtTerm1Cred = new TextField("0");


        Term1UnSelect.setPrefSize(350, 100);
        Term2UnSelect.setPrefSize(350, 100);
        Term1Select.setPrefSize(350, 100);
        Term2Select.setPrefSize(350, 100);
        YearSelect.setPrefSize(350, 50);
        txtTerm1Cred.setMaxWidth(50);
        txtTerm1Cred.setMaxWidth(50);
        Term1AddBtn.setPrefWidth(70);
        Term1RemoveBtn.setPrefWidth(70);
        Term2AddBtn.setPrefWidth(70);
        Term2RemoveBtn.setPrefWidth(70);
        ResetBtn.setPrefWidth(70);
        SubmitBtn.setPrefWidth(70);

        VBox vboxTerm1Unsel = new VBox();
        VBox vboxTerm2Unsel = new VBox();
        VBox vboxTerm1Sel   = new VBox();
        VBox vboxTerm2Sel   = new VBox();
        VBox vboxYear   = new VBox();
        HBox hboxTerm1Btns  = new HBox();
        HBox hboxTerm2Btns  = new HBox();
        HBox hboxTerm1Cred  = new HBox();
        HBox hboxTerm2Cred  = new HBox();
        HBox hboxResetSubmit= new HBox();

        hboxTerm1Btns.setSpacing(20);
        hboxTerm2Btns.setSpacing(20);
        hboxTerm1Cred.setSpacing(20);
        hboxTerm2Cred.setSpacing(20);
        hboxResetSubmit.setSpacing(20);

        vboxTerm1Unsel.getChildren().addAll(lblTerm1UnSel, Term1UnSelect);
        vboxTerm2Unsel.getChildren().addAll(lblTerm2UnSel, Term2UnSelect);
        vboxTerm1Sel.getChildren().addAll(lblTerm1Sel, Term1Select);
        vboxTerm2Sel.getChildren().addAll(lblTerm2Sel, Term2Select);
        vboxYear.getChildren().addAll(lblYearSel, YearSelect);
        hboxTerm1Btns.getChildren().addAll(lblTerm1Btns, Term1AddBtn, Term1RemoveBtn);
        hboxTerm2Btns.getChildren().addAll(lblTerm2Btns, Term2AddBtn, Term2RemoveBtn);
        hboxTerm1Cred.getChildren().addAll(lblTerm1Cred, txtTerm1Cred);
        hboxTerm2Cred.getChildren().addAll(lblTerm2Cred, txtTerm1Cred);
        hboxResetSubmit.getChildren().addAll(ResetBtn, SubmitBtn);

        hboxTerm1Btns.setAlignment(Pos.CENTER);
        hboxTerm2Btns.setAlignment(Pos.CENTER);
        hboxTerm1Cred.setAlignment(Pos.CENTER);
        hboxTerm2Cred.setAlignment(Pos.CENTER);
        hboxResetSubmit.setAlignment(Pos.CENTER);

        VBox.setVgrow(Term1UnSelect, Priority.ALWAYS);
        VBox.setVgrow(Term2UnSelect, Priority.ALWAYS);
        VBox.setVgrow(Term1Select, Priority.ALWAYS);
        VBox.setVgrow(Term2Select, Priority.ALWAYS);
        VBox.setVgrow(YearSelect, Priority.ALWAYS);

        VBox.setVgrow(vboxTerm1Unsel, Priority.ALWAYS);
        VBox.setVgrow(vboxTerm2Unsel, Priority.ALWAYS);
        VBox.setVgrow(vboxYear, Priority.ALWAYS);
        VBox.setVgrow(vboxTerm1Sel, Priority.ALWAYS);
        VBox.setVgrow(vboxTerm2Sel, Priority.ALWAYS);

        VBox leftVBox = new VBox(vboxTerm1Unsel, hboxTerm1Btns, vboxTerm2Unsel, hboxTerm2Btns, hboxTerm1Cred);
        leftVBox.setSpacing(5);
        HBox.setHgrow(leftVBox, Priority.ALWAYS);

        VBox rightVBox = new VBox(vboxYear, vboxTerm1Sel, vboxTerm2Sel, hboxTerm2Cred);
        rightVBox.setSpacing(5);
        HBox.setHgrow(rightVBox, Priority.ALWAYS);

        rootHBox.getChildren().addAll(leftVBox, rightVBox);
        rootHBox.setSpacing(5);
        rootHBox.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);

        BorderPane.setAlignment(rootHBox, Pos.CENTER);
        this.setCenter(new StackPane(rootHBox));
        this.setBottom(hboxResetSubmit);

    }
}

您可以同时使用两者的间距。

【讨论】:

  • 救命稻草!谢谢你,我对使用 FlowPane 的想法非常有远见,我觉得这是错误的,但我想不出我还能做什么,谢谢你的帮助! :)
猜你喜欢
  • 2017-11-22
  • 1970-01-01
  • 2018-09-15
  • 2016-04-27
  • 2019-10-06
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
相关资源
最近更新 更多