JavaFX SceneBuilder无法使用fx:include打开fxml文档

时间:2017-07-14 19:25:44

标签: java javafx scenebuilder

我有一个用SceneBuilder构建的JavaFX应用程序,我刚刚发现了一个漂亮的fx:include标签,它允许你将FXML文件包含在其他文件中。我有一个名为Manager.fxml的主要FXML文档,这是一个带标题和TabPane的简单视图。 TabPane中的每个选项卡都有自己的fxml文档和控制器 - 消息,联系人和产品。

以下是代码部分导致SceneBuilder认为它是一个无效的fxml文件,特别是fx:include部分,如果我删除它有效。它甚至可以在Java代码中工作,如果我注入选项卡并将其内容设置为我正在尝试包含的加载的FXML。

import 'reflect-metadata';
import 'zone.js/dist/zone-node';
import { platformServer, renderModuleFactory } from '@angular/platform-server'
import { enableProdMode } from '@angular/core'
import { AppServerModuleNgFactory } from '../dist/ngfactory/src/app/app.server.module.ngfactory'
import * as express from 'express';
import { readFileSync } from 'fs';
import { join } from 'path';
import * as compression from 'compression';

const PORT = 4200;

enableProdMode();

const app = express();

let template = readFileSync(join(__dirname, '..', 'dist', 'index.html')).toString();

app.engine('html', (_, options, callback) => {
  const opts = { 
     document: template
    ,url: options.req.url
    ,extraProviders: [
                         { provide: 'request', useFactory: () => options.req }
                        ,{ provide: 'host',  useFactory: () => options.req.get('host') }
                     ]
  };

  renderModuleFactory(AppServerModuleNgFactory, opts)
    .then(html => callback(null, html));
});

app.set('view engine', 'html');
app.set('views', 'src');
app.use(compression());

app.get('*.*', express.static(join(__dirname, '..', 'dist')));

app.get('*', (req, res) => {
  res.render('index', { req });
});

app.listen(PORT, () => {
  console.log(`listening on http://localhost:${PORT}!`);
});

尽管SceneBuilder说它无效,eclipse也能运行它没问题。我尝试使用File - >在SceneBuilder 2.0中使用内置工具。包括 - > FXML但也失败了 - "未能在' Tab'"下包含fxml_document.fxml。 manager.fxml的根节点是BorderPane - 所有包含的根节点也是BorderPane,因此我尝试将边框窗格包含为边框窗格的中心元素。 Scenebuilder让我拖动一个空的边框窗格,我想要它,但不允许我fx:包含一个。

但这正是我手动构建它的方式,正如您在上面的代码中所看到的那样。

我现在的问题是,如果我尝试打开我手动编辑的FXML(包含fx:include标签的那个),它会说它是一个无效的文件而我无法编辑它。

任何人都有类似的问题吗?

0 个答案:

没有答案