标签: javafx-8

如何在javaFX 2.0应用程序中包装swing组件

在javaFX应用程序中包装swing组件的能力似乎已经从javaFX 2中消失了:

javafx.ext.swing.SwingComponent

在javaFX 2 beta API中没有更多.

还有办法在新API中执行此操作吗?

java swing javafx javafx-2 javafx-8

9
推荐指数
2
解决办法
6998
查看次数

java.lang.IllegalArgumentException:找不到无效的URL或资源

我测试了这段代码:

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

    @Override
    public void start(Stage primaryStage)
    {

        // Image
        Image image = new Image("za.png");
        ImageView imageView = new ImageView();
        imageView.setImage(image);

        // Text
        Text t = new Text();
        t.setText("Do you want to quit?");

        // Buttons
        Button btnYes = new Button("Yes");
        Button btnNo = new Button("No");
        btnYes.setStyle("-fx-background-color:\n"
                + "        #090a0c,\n"
                + "        linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%),\n"
                + "        linear-gradient(#20262b, #191d22),\n"
                + "        radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));\n"
                + "    -fx-background-radius: …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-2 javafx-8

9
推荐指数
2
解决办法
3万
查看次数

如何绕过JavaFX的TableView"占位符"?

JavaFX TableView有一个占位符属性,它基本上是在它为空时Node显示的TableView.如果此属性设置为null(其默认值),则它显示为一个Label或其他一些基于Node"表中没有内容"的文本.

但是如果表中有任何数据行,则占位符将Node消失,并且整个垂直空间TableView将填充行,如果没有足够的数据填充整个表,则包括空行.

这些空行是我想要的,即使表是空的.换句话说,我根本不想使用占位符.有谁知道我怎么做到这一点?

我宁愿不做什么事情,就像TableView在它应该实际上是空的时候放一个空洞的行.

java javafx tableview javafx-2 javafx-8

9
推荐指数
1
解决办法
3194
查看次数

设置日期选择器时间格式

我有这个日期选择器的例子.你能告诉我如何设置日历的日期格式吗?

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.stage.Stage;

import java.time.LocalDate;

public class PickerDemo extends Application {
    @Override public void start(Stage stage) {
        final DatePicker datePicker = new DatePicker(LocalDate.now());
        datePicker.setOnAction(event -> {
            LocalDate date = datePicker.getValue();
            System.out.println("Selected date: " + date);
        });

        stage.setScene(
            new Scene(datePicker)
        );
        stage.show();
    }
    public static void main(String[] args) { launch(args); }
}
Run Code Online (Sandbox Code Playgroud)

javafx javafx-8

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

一段时间后无法打开FXML

我的JavaFX Scene Builder v2.0-b14有问题.

不时,该FXML 无法得到打开.即使我删除除了root之外的FXML 中的所有内容.
在任务栏中,它看起来像这样:
无法打开FXML

如果我重命名文件,我可以正常打开 FXML .
重命名的FXML正常打开

有没有人知道/有这个问题,或者知道SceneBuilder缓存这些东西的位置?

问候,
卡拉施

fxml scenebuilder javafx-8

9
推荐指数
1
解决办法
7367
查看次数

将回调转换为Java 8 Lambda表达式

在我目前的项目中,我正在开发一个包含TreeTableView的相当简单的JavaFX GUI.要初始化View,我有以下代码.

cmdNrColumn.setCellFactory(new Callback<TreeTableColumn<Command, Command>, TreeTableCell<Command, Command>>() {
    @Override public TreeTableCell<Command, Command> call(final TreeTableColumn<Command, Command> p) {
        return new TreeTableCell<Command, Command>() {
            @Override protected void updateItem(Command item, boolean empty) {
                super.updateItem(item, empty);

                TreeTableView treeTable = p.getTreeTableView();

                if (getIndex() >= treeTable.getExpandedItemCount()) {
                    setText(null);
                } else {
                    TreeItem<Command> treeItem = treeTable.getTreeItem(getIndex());
                    if (item == null || empty || treeItem == null || treeItem.getValue() == null) {
                        setText(null);
                    } else {
                        setText(Integer.toString(item.getCmdNr()));
                    }
                }
            }
        };
    }
});
Run Code Online (Sandbox Code Playgroud)

作为Java 8的新手,我不太确定是否以及如何将其简化为Lambda表达式.

有关如何将复杂和嵌套调用转换为Lambda表达式的任何帮助或教程将不胜感激

谢谢!

java lambda java-8 javafx-8

9
推荐指数
1
解决办法
5490
查看次数

在FXML中设置CheckBoxTableCell

我目前在从FXML设置CheckBoxTableCell时遇到问题.我试图将此代码转换为FXML:

tableCol.setCellValueFactory(new PropertyValueFactory<Product, Boolean>("property"));
tableCol.setCellFactory(CheckBoxTableCell.forTableColumn(toStockCol));
Run Code Online (Sandbox Code Playgroud)

其中'property'只是'Product'类的一些属性(来自'boolean'类型).这段代码工作正常.我现在尝试在FXML中设置它,如下所示:

<TableColumn text="Some Col">
    <cellValueFactory><PropertyValueFactory property="property" /></cellValueFactory>
    <cellFactory><CheckBoxTableCell editable="true" /></cellFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)

这不起作用,我得到以下错误(这是一个FXML LoadExeption):

Caused by: java.lang.IllegalArgumentException: Unable to coerce CheckBoxTableCell@24d62d1e[styleClass=cell indexed-cell table-cell check-box-table-cell]'null' to interface javafx.util.Callback.
at com.sun.javafx.fxml.BeanAdapter.coerce(BeanAdapter.java:495)
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:258)
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:54)
at javafx.fxml.FXMLLoader$PropertyElement.set(FXMLLoader.java:1409)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:786)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2827)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2536)
... 42 more
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我做错了什么.此外,在我看来,几乎没有关于如何使用FXML在TableView中设置CheckBox的文档.

注意:我想从FXML设置它,因为它似乎是这个的地方.我知道这可以用FXML控制器完成.而且,我只是好奇.

任何帮助是极大的赞赏!

checkbox javafx tableview fxml javafx-8

9
推荐指数
1
解决办法
1980
查看次数

使用JavaFX 8和css加载自定义字体

问题

我正在为我的应用程序创建一个超级马里奥主题css样式表,我想将我的按钮字体更改为名为Press Start 2P的自定义字体,这是NES Mario游戏中使用的像素化字体.但是,由于某些奇怪的原因,我的应用程序没有加载字体.

CSS代码:

.text
{
    -fx-font-family: "Press-Start-2P";
}

.button
{
    -fx-background-color: transparent;
    //-fx-text-fill: rgb(255, 255, 255);
}

@font-face
{
    font-family: Press-Start-2P;
    src: url("PressStart2P.ttf");
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,它给了我这样的信息:

2015年4月25日上午8:22:32 com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged INFO:无法加载@ font-face字体[file:/ C:/ Users/Ahmad%20El-Baher/Documents/Programming/Java /Integrative%20Project%20Semester%204/trunk/build/classes/res/styles/PressStart2P.ttf]

如何让我的应用程序正确加载我的字体?

css fonts javafx custom-font javafx-8

9
推荐指数
2
解决办法
6921
查看次数

在pannable/zoomable窗格中拾取并移动节点

我试图在里面放几个组件ScrollPane.这些组件应该能够通过鼠标(单击并拖动)在此窗格中移动.它ScrollPane本身是可以平移和可缩放的.

现在,如果我选择其中一个并将其拖动到一个新位置,如果我缩小,鼠标比组件快.放大时,组件的移动速度比鼠标移动的速度快.

如果没有缩放,它会一直工作,直到我到达ScrollPane自动平移的某个位置.

它必须对确定的节点坐标做一些事情.有没有人知道我必须添加什么才能使其正常工作?

我的控制器类:

public class MainWindowController implements Initializable {

    private final double SCALE_DELTA = 1.1;
    private final StackPane zoomPane = new StackPane();
    private Group group = new Group();

    @FXML
    private ScrollPane scrollPane;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        Node node1 = new Node("Test");
        Node node2 = new Node("Test2", 100, 200);

        group.getChildren().addAll(node1, node2);
        zoomPane.getChildren().add(group);
        Group scrollContent = new Group(zoomPane);
        scrollPane.setContent(scrollContent);
        scrollPane.viewportBoundsProperty().addListener((ObservableValue<? extends Bounds> observable,
                Bounds oldValue, Bounds newValue) -> {
                    zoomPane.setMinSize(newValue.getWidth(), …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-8

9
推荐指数
1
解决办法
1197
查看次数

JavaFX中的重渲染任务(在画布中)阻止GUI

我想创建一个在画布中执行许多渲染的应用程序.正常的JavaFX方式阻止了GUI:按下下面的应用程序代码中的按钮真的很难(用Java 8运行).

我在网上搜索,但JavaFX不支持后台渲染:所有渲染操作(如strokeLine)都存储在缓冲区中,稍后在JavaFX应用程序线程中执行.所以我甚至不能使用两个画布并在渲染后进行交换.

此外,javafx.scene.Node.snapshot(SnapshotParameters,WritableImage)不能用于在后台线程中创建映像,因为它需要在JavaFX应用程序线程内运行,因此它也会阻止GUI.

有没有非阻塞GUI和许多渲染操作的想法?(我只想按下按钮等,同时在背景中以某种方式执行渲染或定期暂停)

package canvastest;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.StrokeLineCap;
import javafx.stage.Stage;

public class DrawLinieTest extends Application
{
    int             interations     = 2;

    double          lineSpacing     = 1;

    Random          rand            = new Random(666);

    List<Color>     colorList;

    final VBox      root            = new VBox();

    Canvas          canvas          = new Canvas(1200, 800);

    Canvas          canvas2         = new …
Run Code Online (Sandbox Code Playgroud)

java canvas javafx-8

9
推荐指数
1
解决办法
2196
查看次数