我正在尝试进行ListView 编辑,但是当我添加事件处理程序时onEditCommit,onEditCancel在代码中我无法更改文本ListView.在我的代码下面(执行但编辑不起作用):
public class ItensTipoStringController implements Initializable {
@FXML
private ListView lstItens;
ArrayList<String> itens = new ArrayList<>();
ObservableList itensObservaveis = FXCollections.observableArrayList(itens);
@Override
public void initialize(URL url, ResourceBundle rb) {
itens.add("Evandro");
itens.add("Miguel");
lstItens.setEditable(true);
lstItens.setCellFactory(TextFieldListCell.forListView());
lstItens.getItems().addAll(itens);
lstItens.setOnEditCommit(new EventHandler() {
@Override
public void handle(Event event) {
System.out.println("onEditCommit");
}
});
lstItens.setOnEditCancel(new EventHandler() {
@Override
public void handle(Event event) {
System.out.println("onEditCancel");
}
});
lstItens.setOnEditStart(new EventHandler() {
@Override
public void handle(Event event) {
System.out.println("onEditStart");
}
}); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个基于OSGI(Equinox)的系统,我遇到了JavaFX,我正在尝试e(fx)clipse {OSGI包项目},我写了一个简单的测试项目,但它给了我一些编译错误.我有一个主要课程:
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class main extends Application {
private static main _main ;
public main () {
_main = this;
}
public static main Get_Main(){
return _main;
}
@Override
public void start(Stage primaryStage)
{
try
{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(main.class.getResource("fxml.fxml"));
primaryStage.setScene(new Scene(loader.load()));
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个FXML控制器
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
public …Run Code Online (Sandbox Code Playgroud) 使用JavaFX和FXML我想在用户提交时验证用户的输入.查看.fxml文档,您会看到我有两个输入字段,一个用于邮政编码,另一个用于城市名称.我正在从xml文件中强制执行NumberTextField.java和CityNameTextField.java,但是如何在用户点击提交时确保它们不是空白的?
FXMLDocument.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import validatetextfieldsfxml.custom.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label layoutX="173.0" layoutY="89.0" text="ZipCode" />
<Label layoutX="173.0" layoutY="118.0" text="CityName" />
<NumberTextField fx:id="zipCodeTf" layoutX="257.0" layoutY="84.0" />
<CityNameTextField fx:id="cityNameTf" layoutX="257.0" layoutY="113.0" />
<Button fx:id="btn" layoutX="217.0" layoutY="162.0" mnemonicParsing="false" text="Submit" />
</children>
</Pane>
Run Code Online (Sandbox Code Playgroud)
CityNameTextField.java
package validatetextfieldsfxml.custom;
import javafx.scene.control.TextField;
public class CityNameTextField extends TextField {
public CityNameTextField(){
this.setPromptText("Enter Your CityName");
}
@Override
public void replaceText(int i, int il, …Run Code Online (Sandbox Code Playgroud) 我有一个JavaFX TableView,我正在使用ObservableList of Tasks填充.我一直在尝试创建一个显示每行索引的列,它作为表中任务的ID,但我在这里尝试了这个方法,其他来源的类似方法也没有成功.
我的代码供参考,没有表面错误(就Eclipse而言):
@FXML private TableColumn<Task, String> taskIndexCol;
Callback<TableColumn<Task, String>, TableCell<Task, String>> cb =
new Callback<TableColumn<Task, String>, TableCell<Task, String>>(){
@Override
public TableCell<Task, String> call(TableColumn<Task, String> col) {
TableCell<Task, String> cell = new TableCell<Task, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
setText("");
} else {
setText(getIndex()+"");
}
}
};
return cell;
}
};
taskIndexCol.setCellFactory(cb);
Run Code Online (Sandbox Code Playgroud)
目前,当我尝试设置列的CellFactory时,我的代码给了我一个NullPointerException.我已经尝试了一个填充的任务列表,但这没有帮助.我已经被困了很长时间了 - 理论上这应该很简单,因为它只是对行进行编号?感觉就像是在跳过一百万个箍来做一些令人沮丧的简单事情.
编辑:最后一行给了我NPE.
我发现当我单击“无响应”之类的“开始”按钮时,我的GUI在3-4秒后开始冻结。当我继续单击该应用程序时,它被迫关闭。
现在我想防止这种情况,但是我不知道如何。据我所知,JavaFX在单线程中运行,因此,要在执行方法时更新我的TextArea,我需要在另一个线程中运行这些方法。
我希望有一个人可以帮助我。
我的项目看起来如何?
我有一个FXML,一个控制器,一个处理程序,一个Transformer,还有一个Writer和Reader类(在Handler类中使用)。
当我单击绑定到Controller中的方法的按钮时,将创建Handler的实例,该实例调用Reader读取文本文件,并将其转换为字符串列表(逐行)。
另外,生产线正在被操纵。此后,使用Writer创建一个新文件,并将新的操纵行写入该文件。
还允许用户引用多个文件。
我想要的是,每当读者开始读取“正在读取文件...”之类的文件时,文本区域都会显示。
然后在Transformer生效时附加“正在操纵文件...”,然后
将新行写入新文件时,“正在写入文件...”。
这是一些代码。
控制器:
public class FXMLDocumentController implements Initializable {
@FXML
private TextArea console;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
Handler hand = new Handler();
hand.handle(files);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
处理程序:
public class Handler {
public void handle(List<String> files) {
for (String s : files) {
List<String> ls = Reader.readFile(s);
Writer.writeFile(Transformer.transform(ls));
}
}
Run Code Online (Sandbox Code Playgroud)
每当读取,操作或写入文件时,应如何更改代码以更新TextArea?
信息:我知道Handler将无法编译,因为我删除了包含文件路径字符串的列表“文件”的初始化。
如果我遗漏了相关信息,请随时提问。
我提前谢谢你!
在我的FXML项目中,我不想硬编码布局中的所有常量.边距和填充等简单的东西.我宁愿把它们放在一个地方.我该怎么办?
我可以使用常量创建一个类并在我的fxml布局中访问它们吗?我知道fx:define但我必须在每个fxml文件中重复这个.或者有没有办法fx:在中央文件中定义并将其附加到我的所有fxml布局?或者也许有类似于我用于内化的资源包?
我初始化了一些元素而不是我的Anchor窗格:
AnchorPane root = new AnchorPane(listLoader.load(), textareaLoader.load(), fieldLoader.load(), menuLoader.load(), buttonLoader.load());
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试单击MenuBar或列表视图时,它不起作用.例如,在这种情况下,我可以单击按钮(可能),因为它是我在AnchorPane构造函数中初始化的最后一个元素.我无法使用BorderPane或任何其他布局,因此我需要找到具有此配置的解决方案.这些是我的fxml文件:
list.fxml
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mailbox.ListController">
<children>
<AnchorPane>
<children>
<ListView fx:id="listView" layoutX="1.0" layoutY="31.0" prefHeight="371.0" prefWidth="239.0" />
</children>
</AnchorPane>
</children>
Run Code Online (Sandbox Code Playgroud)
menuBar.fxml
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="mailbox.MenuBarController">
<children>
<AnchorPane>
<children>
<MenuBar fx:id="menuBar" layoutX="0.0" layoutY="0.0">
<menus>
<Menu text="File">
<items>
<MenuItem onAction="#elimina" text="Elimina" />
</items>
</Menu>
<Menu text="Cambia Account">
<items>
<MenuItem fx:id="email1" text="filippo@hotmail.it" />
<MenuItem fx:id="email2" text="giancarlo@yahoo.it" />
<MenuItem fx:id="email3" text="alessandro@gmail.it" />
</items>
</Menu>
</menus>
</MenuBar>
</children>
</AnchorPane>
</children>
Run Code Online (Sandbox Code Playgroud)
textArea.fxml
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="mailbox.TextAreaController">
<children> …Run Code Online (Sandbox Code Playgroud) I am looking for ways to limit how much a user can resize the main window of my application, without preventing resizing completely. Specifically, I want to set minimum width and height for the window, and you'd think minWidth and minHeight would achieve this, but apparently they do not.
The root element of my window (declared in fxml) looks like this:
<VBox xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.my.module.FXMLController"
minWidth="400.0">
<!-- ... -->
</VBox>
Run Code Online (Sandbox Code Playgroud)
But all that minWidth seems to be doing is setting …
我正在使用Java JDK 13和FontAwesomeFX 11。
我有一个FXML文件,其中包含一些FontAwesomeIconViews,但是将文件加载到控制器中时,我得到的是javafx.fxml.LoadException。这是FXML文件的样子:
<?xml version="1.0" encoding="UTF-8"?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox id="window" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<BorderPane id="upper" fx:id="upper" prefHeight="50.0" prefWidth="800.0" stylesheets="@style.css">
<left>
<Label text="TEXT" BorderPane.alignment="CENTER">
<font>
<Font size="20.0" />
</font>
</Label>
</left>
<right>
<HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
LINE 27 <FontAwesomeIconView glyphName="WINDOW_MINIMIZE" size="20" />
<FontAwesomeIconView glyphName="CLOSE" size="30" />
</children></HBox>
</right>
</BorderPane>
<AnchorPane id="body" prefHeight="554.0" prefWidth="800.0">
<children> …Run Code Online (Sandbox Code Playgroud)