我想将编码图像嵌入到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传递给与文件相同的图像,但这不是我想要的).
有人能帮助我吗?
非常感谢你!
我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为空,但事实并非如此.也没有例外.
找不到任何关于此的例子.如何在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)
如果可行,我的代码将在可读性方面受益.谢谢!
我有这个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上打开并显示此错误:
错误
Run Code Online (Sandbox Code Playgroud)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.
如果我删除fx:factory="observableArrayList"它在场景构建器上加载并显示警告但仍然不会运行我的程序.
我不太明白,因为它与我在许多示例example1, …
我是javaFX的新手.我在java中创建了一个自定义的搜索框(扩展TextField),检查图像:

我用测试类测试了它,它正在工作.
我现在想知道是否可以创建其FXML文件而不是将此组件添加到场景构建器中?怎么做 ?提前致谢.
我正在尝试创建一个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) 我正在使用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) 我正在转换一个纯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)
我怎么绕过这个?我需要以某种方式再次实现该方法,但突然间我不能将该阶段作为参数传递.
使用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并没有太多发现,我发现它有点过时,似乎没有一个实际的工作解决方案. …