我有一个ComboBox<Perosn>类型Person,其中我添加了几个Person类的对象,
我已经使用setCellFactory(Callback)方法在ComboBox下拉列表中显示人名
combobox.setCellFactory(
new Callback<ListView<Person >, ListCell<Person >>() {
@Override
public ListCell<Person > call(ListView<Person > p) {
ListCell cell = new ListCell<Person >() {
@Override
protected void updateItem(Person item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText("");
} else {
setText(item.getName());
}
}
};
return cell;
}
});
Run Code Online (Sandbox Code Playgroud)
并且,在选择上setButtonCell(ListCell)显示名称的方法combobox.
combobox.setButtonCell(
new ListCell<Object>() {
@Override
protected void updateItem(Person t, boolean bln) {
super.updateItem(t, bln);
if (bln) {
setText(""); …Run Code Online (Sandbox Code Playgroud) 我最近在Windows 8.1机器上安装了JDK8 + Netbeans8(从Oracle站点下载了捆绑的安装程序).
当我创建一个非常简单的JavaFX FXML应用程序时,它工作正常.但是,当我使用向导添加一个新的数据库实体类并编译它时,我得到以下堆栈跟踪:
Note: Creating non-static metadata factory ...
error: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.logging.PlatformLogger not found
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for sun.util.logging.PlatformLogger not found
at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1173)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:859)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
at …Run Code Online (Sandbox Code Playgroud) 可以在禁用的控件上显示工具提示吗?
我有以下代码,这不起作用:
txt_searchText.setDisable(true);
txt.searchText.setTooltip(new Tooltip("Message"));
Run Code Online (Sandbox Code Playgroud)
有没有人解决这个问题?
谢谢
在C#中,我找到了一个非常好的方法,它允许你从指定的控件中获取所有后代和所有的后代.
我正在为JavaFX寻找类似的方法.
我看到Parent该类是我想要使用的类,因为它是从中派生所有带子项的Node类的类.
这就是我到目前为止(我还没有真正在谷歌上找到任何搜索,比如"JavaFX从场景中获取所有节点"):
public static ArrayList<Node> GetAllNodes(Parent root){
ArrayList<Node> Descendents = new ArrayList<>();
root.getChildrenUnmodifiable().stream().forEach(N -> {
if (!Descendents.contains(N)) Descendents.add(N);
if (N.getClass() == Parent.class) Descendents.addAll(
GetAllNodes((Parent)N)
);
});
}
Run Code Online (Sandbox Code Playgroud)
那么如何判断N是父母(或从父母延伸)?我这样做了吗?它似乎没有工作......它从根(父)节点抓取所有节点,但不从其中包含子节点的节点抓取.我觉得这可能是一个答案,但我只是问这个问题......错了.我该怎么做呢?
我在互联网上看到了向TableView添加行的示例,例如使用Oracle文档中的Person类.
但是我有一个可变数量的列,所以我不能绑定到Person(或任何其他)bean业务对象.
Oracle示例继续展示如何将列绑定到属性名称,但为此,它仅显示如何添加列,而不显示行.
我的问题是,有人可以指向一个Hello,World示例,动态地将任意列和/或行添加到JavaFX 8 TableView中吗?
如何传递HTTP标头
JavaFX中的"接受语言","接受","接受编码"到WebEngine?我已尝试使用JavaFX的WebEngine/WebView设置cookie中指定的方法,但它不起作用.是否有任何API在Java 8中公开以实现此目的?请建议.
在JavaFX中获取节点绝对位置的最佳方法是什么?假设我们在一个窗格(Hbox,Stackpane,......或任何其他窗格)中有一个节点,并且可能有父节点.我想获得该节点的绝对位置并在另一个窗格中使用它?
我有两台显示器.我在第二台显示器上打开了Eclipse,但是当我运行JavaFX代码时,JavaFX窗口总是在第一台显示器中打开,每次我必须将它拖到第二台显示器上才能使用它.
我必须这样做,因为当它在第一个监视器上打开时,场景中没有任何组件被加载.仅当我将其拖动到第二个监视器时才会加载它.但是,当我断开第二台显示器时,它会正确加载.
有人可以帮帮我吗?默认情况下,如何在第二台显示器上打开窗口?
注意:我的第一台显示器是Macbook Pro,第二台是用作外接显示器的iMac.
回应评论:
任何简单的javaFX代码都会出现组件在screen1上无法正确加载的问题.例如,为了方便起见,我将@Sergey提供的代码作为答案.
码:
public class FXScreens extends Application {
@Override
public void start(Stage stage) {
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root, 200, 250);
int index = 1;
for (Screen screen : Screen.getScreens()) {
Rectangle2D bounds = screen.getVisualBounds();
Button btn = new Button("Move me to Screen " + index++);
btn.setOnAction((e) -> {
stage.setX(bounds.getMinX() + 100);
stage.setY(bounds.getMinY() + 100);
});
root.getChildren().add(btn);
}
stage.setTitle("Screen Jumper");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) …Run Code Online (Sandbox Code Playgroud) 我有很多关于JavaFX的问题.
JavaFX是否附带JDK 8?JavaFX是否还需要自己的运行时环境?
我查看了我的计算机(我安装了JDK和JRE)但找不到JavaFX ...这是否意味着JavaFX有自己独立的运行时环境和开发工具包?如果是这样,我在哪里可以找到下载链接?我真的很困惑......
如果它已经在我的计算机上以某种方式下载,那么JavaFX如何工作?它是类似于Swing还是完全不同(就像它自己的编程语言一样?)
很抱歉这些基本问题,我是JavaFX的新手.