所以我有一个TextArea,当用户将段落粘贴到其中,或者只是在其中写入时,我希望它垂直展开以显示所有可用的文本.即不要在文本字段本身使用滚动条...就像许多网页上发生的情况一样.包括我自己在内的许多用户不喜欢被迫在一个小窗口中进行编辑.究竟Facebook状态更新框如何工作.
我试过了
myTextArea.autoSize()
Run Code Online (Sandbox Code Playgroud)
裹着一个
myTextArea.textProperty().addListener(new ChangeListener()....);
但这不起作用.我认为它很高兴自动调整到目前的大小.
左,右和顶部锚点设置为它的父级AnchorPane.我尝试了底部连接而没有连接.理想情况下,我希望随着textarea的增长而增长锚定窗格.
我不介意阅读TextProperty并计算我自己设置的触发器大小......但如果已经有最佳实践,这似乎是一种hacky方法.javafx的属性和子对象的数量是令人畏惧的,这似乎是一个在这里提出问题的好点,而不是试图弄清楚字体/段落占用了多少像素.
更新:
所以我想也许我是在思考它,而我所要做的就是关掉滚动条,剩下的就会发生.唉,寻找"滚动","垂直","vbar"的可用字段和方法,我找不到任何可以使用的东西.ScrollTopProperty看起来像是其他东西.
我设计了一个javkx应用程序在jdk 7中工作正常.当我尝试在java 8中运行它时,我得到以下异常:
javafx.fxml.LoadException:
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2595)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3132)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Root cannot be null
at javafx.scene.Scene.<init>(Scene.java:364)
at javafx.scene.Scene.<init>(Scene.java:232)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:204)
at javafx.concurrent.EventHelper.fireEvent(EventHelper.java:219)
at javafx.concurrent.Task.fireEvent(Task.java:1357)
at javafx.concurrent.Task.setState(Task.java:720)
at javafx.concurrent.Task$TaskCallable$2.run(Task.java:1438)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)
我发现原因是在控制器类的initialize方法中我无法在任何静态组件中使用内置方法.(例如:staticMyTextField.setText()导致java …
使用JavaFX 8时,我们需要通过GUI运行与GUI的交互Platform.runLater,否则如果从另一个线程运行它们将抛出异常.
但是执行Platform.runLater永远不会检查它当前是否在JavaFX线程上.
我写了以下方法:
public static void runSafe(final Runnable runnable) {
Objects.requireNonNull(runnable, "runnable");
if (Platform.isFxApplicationThread()) {
runnable.run();
}
else {
Platform.runLater(runnable);
}
}
Run Code Online (Sandbox Code Playgroud)
这可以确保它永远不会在非fx应用程序线程上运行.
是否有任何理由认为默认实现不会发生这种短路?
我已经安装了ubuntu 14.04.02 x64,oracle jdk 1.8.4并且我尝试运行JavaFX8项目但是我在eclipse中得到了这个消息(不是每次都是这样):
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f69a19a4f78, pid=7035, tid=140090187572992
#
# JRE version: Java(TM) SE Runtime Environment (8.0_40-b25) (build 1.8.0_40-b25)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.40-b25 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x6c3f78] jni_invoke_nonstatic(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x38
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, …Run Code Online (Sandbox Code Playgroud) 我即将编写一个新的跨平台应用程序,我选择JavaFX,主要是因为它丰富的UI库(标准和第三方)和它的本机数据绑定功能.我的应用程序将通过本机打包部署,因为缺少PPAPI Java插件(Chrome将停止Chrome 42中的NPAPI,现在处于测试阶段),这会阻止Chrome用户使用WebStart,并且因为更"经典"用户体验,因此WebStart和自动更新不在桌面上.
方案如下:
然而,在我的脑海中出现了一些问题(最初这两个问题,但我可以在我有更多时更新这个问题):
谢谢大家的帮助.
是否可以为Travis上运行的作业指定JDK的次要版本?我有一个失败的JavaFX项目,因为JDK 1.8.0_31用于执行构建,因为项目使用了一些仅在Java 1.8.0_40(特别是Alert和Spinner)中提供的类.
目前我的.travis.yml文件如下所示:
language: java
jdk:
- oraclejdk8
Run Code Online (Sandbox Code Playgroud)
这是一个失败的构建链接,以防它有用.
在使用Java FX开发GUI时,我似乎使用System.getProperty("line.separator")获得了不同的结果; 在写入文件或从互联网上获取数据时写入"\n".基本上有什么区别?
我想在表单的resize事件(Scene或者Stage不管它是什么)上执行一些功能.
但是如何在JavaFX中检测表单的resize事件?
如果我理解Oracle的公告,JavaKX将不会从JDK 11开始包含在JDK中,并且只能作为OpenJFX使用.
作为软件开发人员,我必须采取哪些步骤才能使用JDK 11+运行我的JavaFX应用程序?有什么好的adivce吗?将通过Gradle提供OpenJDK吗?
我想用JavaFXPorts和 Kotlin 代码构建一个 JavaFX Android 应用程序。是否可以在 JavaFXPorts 项目中使用 Kotlin?这是我的示例 Gradle(版本 5.6.4)项目:
注意:此代码的问题在于 Kotlin 运行时...有没有办法将所有内容捆绑在可执行 Jar 和 Apk 中?
.
??? app
? ??? src
? ? ??? android
? ? ? ??? AndroidManifest.xml
? ? ??? main
? ? ??? kotlin
? ? ??? com.example
? ? ??? App.kt
? ??? build.gradle.kts
??? gradle
? ??? wrapper
? ??? gradle-wrapper.jar
? ??? gradle-wrapper.properties
??? build.gradle.kts
??? gradlew
??? gradlew.bat
??? settings.gradle.kts
Run Code Online (Sandbox Code Playgroud)
./settings.gradle.kts
pluginManagement {
repositories {
gradlePluginPortal()
jcenter() …Run Code Online (Sandbox Code Playgroud)