小编War*_*kst的帖子

与父级扩展的JavaFX布局

我在项目中使用JavaFX而不是Swing,因为增强的多媒体,webviewer和使用视觉效果的可能性.但是,我从网上找到的内容(http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm等)中了解到,JavaFX布局管理器专注于扩展大小父级基于内容的大小,而Swing专注于根据父级缩放内容,至少基于Layout使用的内容.

现在我正Accordion和一些TitledPane孩子一起使用.其中一个包含一个GridPane简单的原因,它是我知道模仿a的最佳方式GridLayout(正如我从上一个问题中学到的:JavaFX布局等效于GridLayout).我希望将TitledPane内容分为2行1列,每行的可用空间高度为50%TitledPane(使用Stage或缩放Scene),相当于GridLayout(2,1)内部的内容BorderLayout.CENTER.对于这一点,我添加了一个GridPane带有2个RowConstraint使用S setPercentHeight(50)和1个ColumnConstraintsetPercentWidth(100).但是,我注意到内容正在与网格正确缩放,但网格没有占用网格中的所有可用空间TitledPane(因为显然它不像一个BorderPane中心).我也尝试过与setMaxWidth父级进行内容扩展,但它似乎也不起作用(如下所述:JavaFX:如何使我的自定义组件使用父布局中的所有可用空间?).即使它会,我是否需要在我的UI元素树中将最大宽度设置为EACH后代,以使它们全部缩放?

无论哪种方式,有没有人知道如何TitledPane在其下方制作一个2个相等的空间,与标题窗格的大小相称?

列宽不占用所有可用空间

java layout user-interface javafx

8
推荐指数
1
解决办法
2万
查看次数

如何在xcode 4.2故事板中正确使用模态视图控制器

我想知道如何正确使用故事板以模态方式设置视图控制器.就个人而言,我更喜欢使用xibs,但似乎故事板越来越受欢迎,并将成为未来的发展方向.

我通常以模态方式设置视图控制器的方式如下:假设我们有ViewControllerA(简称A)和ViewControllerB(简称B).然后我通常会在Bh中指定一个协议,在B想要被解雇时指定委托方法并将该id<theProtocol> delegate字段添加为assign属性.假设我在A忙,我想以模态方式呈现B,我会写:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil];
b.delegate = self;
[self presentModalViewController:B animated:YES];
Run Code Online (Sandbox Code Playgroud)

使用故事板,我知道可以通过按住Ctrl键从按钮拖动到视图控制器并选择模态作为转换类型,以模态方式设置不同的视图控制器.我只是想知道; 我在哪里设置新视图控制器的委托?将事物传递给模态视图控制器的正确做法是什么?我真的不知道Segues的整个交易是什么......

xcode modal-dialog storyboard ios segue

6
推荐指数
1
解决办法
2万
查看次数

JavaFX WebEngine陷入"运行"状态

WebEngine在JavaFX2中使用时,我注意到它有时会卡住.假设我正在创建一个只在页面上找到超链接的爬虫,然后访问它们以递归方式执行相同操作,跟踪我们访问过的链接以及哪些链接已经在边界上.在运行我的代码时,执行有时会在任意时刻挂起.

我在听众的形式加入一些调试代码到我的项目workDoneProperty,并exceptionProperty通过印刷的每一个过渡loadWorkerstateProperty.然后我注意到有时引擎会停止中间加载一个URL(状态被卡住RUNNING并且没有更多workDone更新).我假设这是因为超时或某事,但我已经停止等待,看看它是否确实在5分钟后超时.

exceptionProperty似乎并没有产生任何事件,也不在webEngine过渡到FAILED或者CANCELLED,它只是停止.我想知道这是否可能是图书馆中的竞争条件,或者可能是我缺少的东西......有没有人遇到过这个谁知道如何解决这个问题?对我的应用来说,引擎不仅仅是随机停止......

编辑:从我的控制台添加输出:

Work done: -1
Engine Load Worker transitioning into state: READY
Work done: 0
Engine Load Worker transitioning into state: SCHEDULED
Engine Load Worker transitioning into state: RUNNING
Work done: 21
Work done: 24
Work done: 24
Work done: 57
Work done: 72
BUILD STOPPED (total time: 9 minutes 32 seconds)
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-webengine

6
推荐指数
1
解决办法
2336
查看次数

JavaFX自定义列表单元格,updateItem被调用很多

ListView在JavaFX应用程序中使用a .列表中的项目需要的不仅仅是一个字符串来显示它们,所以我做了一个自定义实现ListCell<T>,其中T是我正在显示的对象的类.在这个自定义类中,我BorderPane在构造函数和覆盖中创建了一个updateItem(T item, boolean empty).我的想法是,当updateItem调用时,我将单元格的图形设置为BorderPane,同时更改Label其内部的s的一些属性.不过,我注意到updateItem不叫一次(例如,当一个细胞是通过滚动循环使用或添加新的项目),但它被称为所有的时间,例如,当从一个小区焦点切换到另一个(甚至无需滚动),或调整场景大小时,或按下边框内的按钮时,......

我需要一个ListView自定义ListCell的.我想在重用单元格时接收一个回调,传递新项目作为参数呈现.然后我想使用该项作为模型来构造一个视图 - 控制器对,我将其视图并将其用作graphic单元格.此视图中的按钮和其他控件应该可以工作.这在JavaFX中是否可行?

链接问题:

listview javafx

6
推荐指数
1
解决办法
6665
查看次数

等效于 GridLayout 的 JavaFX 布局

我习惯于使用 Swing 来创建 GUI,但对于最近的一个项目,我选择切换到 JavaFX。我在重新创建以前使用 GridLayout 制作的某个布局时遇到了一些麻烦。

我希望有以下行为: 2 列与居中其内容的父级的大小成比例。

使用 Swing,我将使用 GridLayout(1 行,2 列)制作 JPanel,并添加 2 个带有 BorderLayout 的 JPanel,将实际内容添加到具有居中约束的面板中。然后我可以将第一个面板添加到任何具有随框架延伸的布局的容器中,一切都会好起来的。

我似乎无法以简单的方式在 JavaFX 中重新创建这种行为。我可以想到使用绑定和组合多个窗格的方法,但我希望有一个布局可以自动执行此操作。我试过使用 TilePane、HBox、GridPane、AnchorPane、SplitPane 甚至 BorderPane,但它们似乎都没有做我想要的。

有没有推荐的方法来实现这一点?我更不想将 Swing 嵌入到应用程序中。基本上我想要的是能够将内容分成两列,这些列会随着舞台/场景 (JFrame) 自动拉伸。

java layout javafx

5
推荐指数
1
解决办法
3308
查看次数

在没有显示的情况下在Ubuntu服务器上部署JavaFX

我正在Netbeans的Mac OS X(10.9.1)上使用jdk1.7.0_51开发JavaFX应用程序.我可以毫无问题地运行它,在干净的构建后,我也可以从dist /文件夹启动jar.

现在我想在64位Ubuntu 13.04服务器上部署它.我做了很多问题,但最终设置服务器以获得正确的JRE,字体和库.运行jar导致错误比我的代码更深入(将UnsatisfiedLinks转到提到MACOS的本机库)所以我认为最好将我的应用程序打包到Ubuntu本身.我最终安装了NetBeans来创建一个新的(本机)JavaFX项目,并使用sftp从我的机器上传了src /和lib /文件夹.通过NetBeans中的重建项目运行代码工作正常,但在运行期间我在控制台中收到警告:

libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4
Run Code Online (Sandbox Code Playgroud)

无论如何,应用程序都会运行.在干净的构建之后,我可以类似地从dist /文件夹运行jar.终端中出现相同的警告但随后应用程序启动.

但是,如果我在没有-X标志的情况下ssh到服务器并尝试运行该应用程序,我会得到以下内容:

Failed in XOpenDisplay
(java:29341): Gtk-WARNING **: cannot open display: 
Run Code Online (Sandbox Code Playgroud)

但是,我的应用程序没有UI.它只是将JavaFX用于WebEngine(这是必需的,不能更改).我想知道是否有人知道是否(如果是这样,如何)可以在没有显示器的情况下启动我的JavaFX jar(只是在服务器上作为守护进程运行).

亲切的问候,Warkst

编辑:

我尝试过这里描述的一些东西:Java无法使用'localhost:10.0'作为DISPLAY变量的值连接到X11窗口服务器

You need to specify the -Djava.awt.headless=true parameter at startup time.
Run Code Online (Sandbox Code Playgroud)

(假设我正在使用命令执行java -Djava.awt.headless=true -jar MyApp.jar此操作),这没有产生任何结果(发生相同的错误).

export DISPLAY=:0
Run Code Online (Sandbox Code Playgroud)

仍然没有结果,虽然错误显然略有改变,现在读到:

(java:30765): Gtk-WARNING **: cannot open display: :0
Run Code Online (Sandbox Code Playgroud)

最后我还尝试了以下内容:

unset DISPLAY
Run Code Online (Sandbox Code Playgroud)

这导致了原始错误(显然没有设置DISPLAY).

java x11 ssh ubuntu javafx

5
推荐指数
1
解决办法
2687
查看次数

XQuery:// vs descendant-or-self :: node()

最近我需要在HTML文档的节点上评估一个XQuery.基本上,我需要从body元素的第一个子元素中选择具有href属性的所有元素.我添加了一个小例子来解释:

<html>
    <body>
        <a href="http://www.google.be"/>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,所需的提取结果显然是:

<a href="http://www.google.be"/>
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用//body/*[1]//*[@href]因为:

  • //body 匹配body元素,无论它在哪里
  • /*[1] 匹配body元素的第一个子元素
  • //*[@href] 匹配当前元素的所有后代或self

我认为这可行,但在提供的示例中,XQuery没有给出任何结果.

但是,我读了一下,发现了以下内容(来源:http://www.keller.com/xslt/8/):

Alternate notation for "//": descendant-or-self::node()
Run Code Online (Sandbox Code Playgroud)

所以我改变了我的XQuery //body/*[1]/descendant-or-self::node()[@href],这次,结果是正确的.

我的问题://和descendant-or-self :: node()之间有什么区别?我在这里找到的(在xpath中//节点和/ descendant :: node之间有什么区别?)和这里(http://www.w3.org/TR/xpath/#axes)说:

//是的缩写/descendant-or-self::node()/.例如,//para简称/descendant-or-self::node()/child::para.

这导致我得出结论//并且/descendant-or-self::node()不可互换(可能是因为最后终止/?),但是有人可以告诉我是否有速记/descendant-or-self::node()

html xml xpath xquery descendant-or-self

5
推荐指数
1
解决办法
9054
查看次数

JavaFX WebEngine等待ajax完成

我正在JavaFX中开发一个依赖于WebView(以及WebEngine)的数据挖掘应用程序.挖掘分两步进行:首先,用户使用UI导航到WebView中的网站,以配置可以搜索有趣数据的位置.其次,使用定期运行的后台任务,WebEngine加载相同的文档并尝试从加载的文档中提取数据.

这适用于大多数情况,但最近我遇到了使用AJAX呈现内容的页面遇到的麻烦.要检查是否已WebEngine加载文档,我听loadWorkerstateProperty.如果状态转换为successcesfull,我知道文档已加载(与可能在document.ready()上运行的任何javascript或等效文件一起).这是因为如果我没有弄错的话,javascript会在JavaFX线程上执行(来源:https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx).但是,如果启动了AJAX调用,则javascript执行完成,引擎让我知道文档已准备就绪,但显然不是因为优秀的AJAX调用内容可能仍然会发生变化.

有没有办法解决这个问题,注入一个钩子,以便在AJAX调用结束时通知我?我已经尝试安装一个默认的完整处理程序,$.ajaxSetup()但这很狡猾,因为如果ajax调用覆盖整个处理程序,则不会调用默认值.另外,我只能在首次加载文档后注入它(然后一些AJAX调用可能已经在运行).我已经使用upcall测试了这个注入,它适用于在命令上启动的AJAX调用(在注入默认处理程序之后),它们不提供自己的完整处理程序.

我正在寻找两件事:第一:挂钩到AJAX调用的完成处理程序的通用方法,其次:等待WebEngine完成所有AJAX调用并在事后通知我的方法.

ajax jquery javafx javafx-webengine

5
推荐指数
1
解决办法
2231
查看次数

Java xpath内存泄漏?

我的情况一直困扰着我好几个月:我不断获得OOM异常(堆空间)和检查堆转储我发现了数百万个我从未分配但可能在底层库中分配的对象实例.经过大量的血,汗和泪,我设法本地化了产生内存泄漏的代码,我编写了一个最小的,完整的,可验证的代码示例来说明这一点:

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.web.WebEngine;
import javafx.stage.Stage;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class MVC extends Application implements ChangeListener<Worker.State>{

    private final WebEngine engine = new WebEngine();
    private final String url = "https://biblio.ugent.be/publication?sort=publicationstatus.desc&sort=year.desc&limit=250&start=197000";
    private final XPath x = XPathFactory.newInstance().newXPath();

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.setProperty("jsse.enableSNIExtension", "false");
        engine.getLoadWorker().stateProperty().addListener(this);
        engine.load(url);
    }

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

    private NodeList eval(Node context, …
Run Code Online (Sandbox Code Playgroud)

java xpath memory-leaks javafx

5
推荐指数
1
解决办法
673
查看次数

PostgreSQL JDBC getGeneratedKeys返回所有列

我最近从MySQL切换到PostgreSQL用于项目的后端,并发现了我需要检查的一些数据库代理方法.要插入链接对象,我使用事务来确保存储所有内容.我这样做使用jdbc方法,如setAutoCommit(false)commit().我编写了一个实用工具方法,将记录插入表中并返回生成的密钥.基本上我按照这里描述的技术2:

http://www.selikoff.net/2008/09/03/database-key-generation-in-java-applications/

这从项目开始以来一直有效,但是从MySQL迁移到PostgreSQL之后会getGeneratedKeys返回新插入记录的所有列(请参阅下面的控制台输出).

码:

final ResultSet keys = ps.getGeneratedKeys();
final ResultSetMetaData metaData = keys.getMetaData();
for (int j = 0; j < metaData.getColumnCount(); j++) {
    System.out.println("Col name: "+metaData.getColumnName(j+1));
}
Run Code Online (Sandbox Code Playgroud)

输出:

Col name: pathstart
Col name: fk_id_c
Col name: xpathid
Col name: firstnodeisroot
Run Code Online (Sandbox Code Playgroud)

表的数据库签名(从pgAdmin III自动生成的SQL):

CREATE TABLE configuration.configuration_xpath
(
  pathstart integer NOT NULL,
  fk_id_c integer NOT NULL,
  xpathid integer NOT NULL DEFAULT nextval('configuration.configuration_xpath_id_seq'::regclass),
  firstnodeisroot boolean NOT NULL DEFAULT false,
  CONSTRAINT configuration_xpath_pkey PRIMARY KEY (xpathid), …
Run Code Online (Sandbox Code Playgroud)

java postgresql jdbc

4
推荐指数
1
解决办法
3939
查看次数