标签: fxml

JavaFX:将编码图像嵌入.FXML文件中

我想将编码图像嵌入到FXML中(我需要这个,因为我在svg和fxml之间编码转换器).我试过这个:

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
    <children>
        <ImageView fitHeight="150.0" fitWidth="200.0" layoutX="153.0" layoutY="94.0" pickOnBounds="true" preserveRatio="true">
            <image>
                <Image url="data:image/png;base64,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 YII= " preserveRatio="false" smooth="false" />
            </image>
        </ImageView>
    </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用了HTML或CSS的标准方式,使用图像的Base64编码传递数据URL.在这种情况下,它不会返回任何错误,但不显示图像(将URL传递给与文件相同的图像,但这不是我想要的).

有人能帮助我吗?

非常感谢你!

base64 javafx image fxml

7
推荐指数
1
解决办法
2513
查看次数

通过FXML的JavaFX ImageView不起作用

ImageView在使用FXML 加载图像时遇到问题.

我的控制器类:

public class BoxViewController {
    @FXML
    private Label label_boxID;

    @FXML
    private ImageView boximage;

    public void initData(ObservableList<BoxProperty> observableList,
                         BoxService sBox, 
                         TableView tableview) {
        this.label_boxID.setText(
            String.valueOf(this.boxproperty.getPboxid()));

        Image image = new Image("boximage.jpg");
        this.boximage = new ImageView();
        this.boximage.setImage(image);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,使用文本设置标签有效,但图像不会出现在我的ImageView中.对于ImageView,我在FXML文件中添加了一个ID:

 <ImageView fx:id="boximage" 
            disable="false" 
            fitHeight="150.0" fitWidth="200.0"
            layoutX="69.0" layoutY="322.0" 
            pickOnBounds="true" 
            preserveRatio="true" />
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么这不起作用,因为标签工作,但图像不会加载.
我还检查了是否boximage为空,但事实并非如此.也没有例外.

javafx image imageview fxml

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

如何限制javafx文本字段的字符数量

我使用FXML设置我的表单,但我需要设置textfields中的字符限制.我该怎么做?

javafx fxml

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

FXML文件中的常量

找不到任何关于此的例子.如何在FXML文件中定义常量?

例如(CONTENT_SPACING我想要创建的常量在哪里):

<VBox fx:controller="myapp.Controller" xmlns:fx="http://javafx.com/fxml" alignment="center" spacing="20">
    <fx:define>
        <Double fx:id="CONTENT_SPACING" fx:value="200"/>
    </fx:define>

    <VBox fx:id="content" spacing="$CONTENT_SPACING">
        <!-- My window contents would go here -->
    </VBox>
</VBox>
Run Code Online (Sandbox Code Playgroud)

如果可行,我的代码将在可读性方面受益.谢谢!

variables javafx constants fxml

7
推荐指数
1
解决办法
3017
查看次数

填充ComboBox后,FXML场景构建器无效属性

我有这个FXML文件,我尝试填充ComboBox:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="650.0" minWidth="750.0" prefHeight="700.0" prefWidth="822.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="table.Table">
   <children>
    <MenuButton fx:id="dateFilter" layoutX="6.0" layoutY="55.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="114.0" text="Date" />
    <ComboBox fx:id="descriptionFilter" editable="true" layoutX="226.0" layoutY="55.0" prefHeight="25.0" prefWidth="204.0" promptText="Series Description">
        <items>
            <FXCollections fx:factory="observableArrayList">
                <String fx:value="1" />
                <String fx:value="20" />
                <String fx:value="300" />
            </FXCollections>
        </items>
    </ComboBox>
  </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

但是因为我填充它,它将无法在SceneBuilder上打开并显示此错误:

错误

java.io.IOException: javafx.fxml.LoadException: Invalid attribute.
/C:/Users/BTAP/workspace/Tst/src/table/table.fxml:12
Run Code Online (Sandbox Code Playgroud)

并且它不会加载我的应用程序:

Caused by: javafx.fxml.LoadException: FXCollections is not a valid type.
Run Code Online (Sandbox Code Playgroud)

注意

如果我删除fx:factory="observableArrayList"它在场景构建器上加载并显示警告但仍然不会运行我的程序.

我不太明白,因为它与我在许多示例example1, …

java javafx javafx-2 fxml

7
推荐指数
1
解决办法
5690
查看次数

如何为java中已创建的新组件创建FXML文件,而不是将其添加到场景构建器?

我是javaFX的新手.我在java中创建了一个自定义的搜索框(扩展TextField),检查图像:

在此输入图像描述

我用测试类测试了它,它正在工作.

我现在想知道是否可以创建其FXML文件而不是将此组件添加到场景构建器中?怎么做 ?提前致谢.

java javafx fxml scenebuilder

7
推荐指数
1
解决办法
3781
查看次数

如何使用FXML创建Integer微调器

我正在尝试创建一个Integer Spinner,而是创建一个而Double不是.

的Test.class

package com.neonorb.test;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Test extends Application{
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Demo.fxml"));
        Parent root = fxmlLoader.load();
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

DemoController.class

package com.neonorb.test;

import javafx.fxml.FXML;
import …
Run Code Online (Sandbox Code Playgroud)

javafx spinner fxml

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

FXML,JavaFX 8,TableView:在每一行中创建一个删除按钮并相应地删除该行

我正在使用TableView(FXML),我希望在最后一列中包含所有行以及删除按钮.

这是一个显示我的意思的视频:TableView中的YouTube删除按钮

这是我在主控制器类中的内容:

public Button del() {
    Button del = new Button();
    del.setText("X");
    del.setPrefWidth(30);
    del.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent event) {
            int i = index.get();
            if(i > -1) {
                goals.remove(i);
                list.getSelectionModel().clearSelection();
            }
        }
    });
    return del;
}

private SimpleIntegerProperty index = new SimpleIntegerProperty();

@Override
public void initialize(URL location, ResourceBundle resources){
    //DateFormat df = new SimpleDateFormat("dd MMM yyyy");
    sdate.setValue(LocalDate.now());
    edate.setValue(LocalDate.now());

    seq.setCellValueFactory(new PropertyValueFactory<Goals, Integer>("id"));
    gol.setCellValueFactory(new PropertyValueFactory<Goals, String>("goal"));
    sdt.setCellValueFactory(new PropertyValueFactory<Goals, Date>("sdte"));
    edt.setCellValueFactory(new PropertyValueFactory<Goals, Date>("edte"));
    prog.setCellValueFactory(new PropertyValueFactory<Goals, Integer>("pb"));
    del.setCellValueFactory(new PropertyValueFactory<Goals, Button>("x"));

    list.setItems(goals); …
Run Code Online (Sandbox Code Playgroud)

fxml javafx-8

7
推荐指数
1
解决办法
8958
查看次数

如何从Controller访问JavaFx Stage?

我正在转换一个纯JavaFx应用程序,其中下面的代码在将所有内容放在一个类中时工作正常,到FXML,其中Stage声明和按钮处理程序在不同的类中.在一个Controller中,我试图实现一个方法,允许用户选择一个目录并将其存储在一个变量中供以后使用:

private File sourceFile;
DirectoryChooser sourceDirectoryChooser;

@FXML
private void handleSourceBrowse() {
        sourceDirectoryChooser.setTitle("Choose the source folder");
        sourceFile = sourceDirectoryChooser.showDialog(theStage);
}
Run Code Online (Sandbox Code Playgroud)

但是,"theStage"是该方法所需的阶段,只在FolderSyncer4.java中存在(如果这是正确的术语):

public class FolderSyncer4 extends Application {

    final String FOLDER_SYNCER = "FolderSyncer";

    Stage theStage;

    @Override
    public void start(Stage primaryStage) throws Exception {
        theStage = primaryStage;

        //TODO do the FXML stuff, hope this works
        Parent root = FXMLLoader.load(getClass().getResource("FolderSyncerMainWindow.fxml"));
        theStage.setScene(new Scene(root, 685, 550));
        theStage.setTitle(FOLDER_SYNCER);
        theStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么绕过这个?我需要以某种方式再次实现该方法,但突然间我不能将该阶段作为参数传递.

java controller javafx fxml

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

使用Kotlin时,FXML控件始终为null

使用IntelliJ我创建了一个JavaFX应用程序,然后将Kotlin和Maven作为框架添加到其中.它附带了一个sample.fxml文件以及一个Controller.java和Main.java.我在Kotlin(MainWindowController.kt)中为控制器创建了一个新类,并将sample.fxml文件重命名为MainWindow.fxml.我将MainWindow.fxml更新为:

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.GridPane?>
<GridPane fx:controller="reader.MainWindowController" xmlns:fx="http://javafx.com/fxml" xmlns="http://javafx.com/javafx/8" alignment="center" hgap="10" vgap="10">
    <Label fx:id="helloLabel" text="Hello"/>
</GridPane>
Run Code Online (Sandbox Code Playgroud)

在我的MainWindowController.kt文件中,我有:

package reader

import javafx.fxml.FXML
import javafx.scene.control.Label

class MainWindowController {

    @FXML var helloLabel: Label? = null

    init {
        println("Label is null? ${helloLabel == null}")
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Main.java:

import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("MainWindow.fxml"));
        primaryStage.setTitle("My App");
        primaryStage.setScene(new Scene(root, 1000, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,打印行显示标签为空,否则窗口显示正确,我看到我的标签中的文本.null是我遇到的问题.我在Kotlin上使用FXML并没有太多发现,我发现它有点过时,似乎没有一个实际的工作解决方案. …

java javafx kotlin fxml

7
推荐指数
2
解决办法
2124
查看次数