为什么不可见的TableView会覆盖标签? [英] Why is an invisible TableView covering up a label?

查看:101
本文介绍了为什么不可见的TableView会覆盖标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的GUI问题.我正在使用JavaFX制作应用程序.该应用程序具有不同的页面,每个页面都有标题,标签和tableView.让我们关注欢迎"页面.如果我仅将一个tableView添加到我的vbox,则一切看起来都很正常.

I have a weird GUI problem. I'm using JavaFX to make an app. The app has different pages, each with a title, label, and tableView. Let's focus on the Welcome page. If I add just one tableView to my vbox, everything appears normal.

vbox.getChildren().addAll(title, subtitle, reqTable);

但是当我添加所有三个tableViews时,标题下方的标签将被切除.这些表甚至还不可见!

But when I add all three tableViews, the label below the title gets cut off. The tables are not even visible yet!

vbox.getChildren().addAll(title, subtitle, reqTable, tempTable, ontTable);

有人知道为什么会这样吗?这是我的完整代码.谢谢!

Any idea why this would happen? Here's my full code. Thanks!

package FLOOR;

// --- Imports
import javafx.application.Application;
import javafx.beans.property.StringProperty;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;

// --- Main Class
public class Example extends Application {

    // --- All Pages
    final Page[] pages = new Page[] {
        new Page("Welcome!",
                "Use the File menu to... \n"),
        };

    // --- All Tables
    TableView<ObservableList<StringProperty>> reqTable = new TableView<>();
    TableView<ObservableList<StringProperty>> tempTable = new TableView<>();
    TableView<ObservableList<StringProperty>> ontTable = new TableView<>();

    // --- Current Page
    final Label title = new Label();
    final Label subtitle = new Label();

    // --- Main
    public static void main(String[] args) {
        launch(args);
    }

    // --- Start
    @Override
    public void start(Stage stage) {
        // --- Stage & Scene
        stage.setTitle("APP");
        Scene scene = new Scene(new VBox(), 900, 500);
        MenuBar menuBar = new MenuBar();

        // --- VBox
        final VBox vbox = new VBox();
        vbox.setAlignment(Pos.CENTER);
        vbox.setSpacing(10);
        vbox.setPadding(new Insets(5, 20, 0, 20));
        vbox.getChildren().addAll(title, subtitle, reqTable, tempTable, ontTable);
        //vbox.getChildren().addAll(title, subtitle, reqTable);
        reqTable.setVisible(false);
        tempTable.setVisible(false);
        ontTable.setVisible(false);
        reqTable.setMinHeight(300);
        tempTable.setMinHeight(300);
        ontTable.setMinHeight(300);
        reqTable.translateYProperty().set(100);
        tempTable.translateYProperty().set(-100);
        ontTable.translateYProperty().set(-300);

        // --- Welcome Page
        title.setFont(new Font("Arial", 24));
        title.translateYProperty().set(10);
        title.setText(pages[0].title);
        subtitle.setText(pages[0].subtitle);
        subtitle.setMinHeight(10);

        // --- Menus 
        // --- File Menu
        // --- Import Submenu
        Menu menuFile = new Menu("File");
        Menu importMenu = new Menu("Import");
        MenuItem opt1 = new MenuItem("opt_1");
        MenuItem opt2 = new MenuItem("opt_2");
        MenuItem opt3 = new MenuItem("opt_3");
        importMenu.getItems().addAll(opt1, opt2, opt3);

        MenuItem export = new MenuItem("Export");
        MenuItem exit = new MenuItem("Exit");
        menuFile.getItems().addAll(importMenu, export, new SeparatorMenuItem(), exit);
        menuBar.getMenus().addAll(menuFile);

        // --- Show 
        ((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);
        stage.setScene(scene);
        stage.show();
    }

    // Page Class
    private class Page {
        public String title;
        public String subtitle;
        public Page(String title, String subtitle) {
            this.title = title;
            this.subtitle = subtitle;
        }
    }
}

推荐答案

请以这种方式修改代码,然后检查.

Please modified code in this way and then check.

删除此行:subtitle.setMinHeight(10);或set:subtitle.setMinHeight(50);

remove this line : subtitle.setMinHeight(10); or set : subtitle.setMinHeight(50);

subtitle.setMinHeight(50);

这篇关于为什么不可见的TableView会覆盖标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆