java - JavaFX - 如何为选项卡内的文本字段设置值?
问题描述
我正在尝试为选项卡内的文本字段设置值。我有多个选项卡,我想为每个选项卡内的文本字段设置值。关于如何在选项卡内设置文本字段的文本的任何想法?我正在使用下面的代码来更新文本字段的值,但是在尝试执行相同操作时没有发生任何事情。
代码:
public class FXMLController {
@FXML
private Button inputXmlFileBtn;
@FXML
private TextField inputXmlName;
@FXML
private TabPane xmlData;
@FXML
private Tab vendorHeaderFb;
@FXML
private TextField vendorHeader1;
Label label;
public String inputXmlFileChooser() throws ParserConfigurationException,
SAXException, IOException, JAXBException {
FileChooser fileChooser = new FileChooser();
// Set extension filter
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("XML files (*.xml)", "*.xml"));
// Open Dialog
File file = fileChooser.showOpenDialog(null);
String xmlPath = "";
xmlPath = file.getPath();
// Set the path for inputXmlName text field
if (file != null) {
inputXmlName.setText(xmlPath);
}
//Unmarshall
label = this.unmarshallXml();
System.out.println(label.getVendorHeader1());
vendorHeaderFb = new Tab();
vendorHeader1 = new TextField();
vendorHeader1.setText(label.getVendorHeader1());
vendorHeaderFb.setContent(vendorHeader1);
return xmlPath;
}
更新了代码,包括 FXML 的 Pojo 类。
public class FXMLController {
@FXML
private Button inputXmlFileBtn;
@FXML
private TextField inputXmlName;
@FXML
private TabPane xmlData;
@FXML
private Tab vendorHeaderFb;
@FXML
private TextField VendorHeader1;
Label label;
public String inputXmlFileChooser() throws ParserConfigurationException,
SAXException, IOException, JAXBException {
FileChooser fileChooser = new FileChooser();
// Set extension filter
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("XML files (*.xml)", "*.xml"));
// Open Dialog
File file = fileChooser.showOpenDialog(null);
String xmlPath = "";
xmlPath = file.getPath();
// Set the path for inputXmlName text field
if (file != null) {
inputXmlName.setText(xmlPath);
}
//Unmarshall
label = this.unmarshallXml();
System.out.println(label.getVendorHeader1());
FXMLProps fxmlProps = new FXMLProps();
fxmlProps.setVendorHeader1(label.getVendorHeader1());
System.out.println(fxmlProps.getVendorHeader1());
VendorHeader1 = new TextField();
VendorHeader1.setText(fxmlProps.getVendorHeader1());
//vendorHeaderFb.setContent(vendorHeader1);
//vendorHeader1.setText(label.getVendorHeader1());
//vendorHeaderFb.setContent(vendorHeader1);
return xmlPath;
}
POJO/属性类
public class FXMLProps {
private final SimpleStringProperty VendorHeader1 = new SimpleStringProperty(
"");
public FXMLProps() {
}
public FXMLProps(String VendorHeader1) {
setVendorHeader1(VendorHeader1);
}
public String getVendorHeader1() {
return VendorHeader1.get();
}
public void setVendorHeader1(String vH1) {
VendorHeader1.set(vH1);
}
}
我仍然无法设置文本字段 vendorHeader1 的值。有人可以指出出了什么问题吗?
解决方案
您必须Binding
在 the 的 text 属性TextField
和SimpleStringProperty
用于该值的 the 之间应用 a 。您必须以启用其他类中的选项FXMLProps
的方式将您的供应商标头属性设为公开:Binding
public class FXMLProps {
private final SimpleStringProperty vendorHeader = new SimpleStringProperty("");
public FXMLProps() {}
public FXMLProps(String vendorHeader) {
setVendorHeader(vendorHeader);
}
public String getVendorHeader() {
return VendorHeader1.get();
}
public void setVendorHeader(String vendorHeaderText) {
vendorHeader.set(vendorHeaderText);
}
// this is needed for the Binding
public final SimpleStringProperty vendorHeaderProperty() {
return vendorHeader;
}
}
然后在你的应用程序的某个地方(也许在start()
)你需要创建Binding
类似的
// bind those two properties (TextField, SimpleStringProperty)
Bindings.bindBidirectional(vendorHeader1.textProperty(), fxmlProps.vendorHeaderProperty());
推荐阅读
- segmentation-fault - Python 崩溃 EXC_BAD_ACCESS
- android - 在相对布局中约束对象(在 ConstraintLayout 下)在另一个对象之上
- c++ - Eclipse 混乱系统和本地头文件?
- java - ECGenParameterSpec 未知曲线名称“secp256k1”
- java - 加载 Hive 驱动程序时出错:ClassNotFoundException: org.apache.hive.jdbc.HiveDriver
- r - filter(dataframe, var %in% c(x,y,z) ) 和 filter(dataframe, var == c(x,y,z) 之间的区别
- c++ - SFML 秒计数器
- javascript - Javascript:承诺立即返回,而不是等待异步进程完成
- android-recyclerview - 首次加载列表与重新加载时,notifyItemInserted 与 notifyItemChanged 有什么区别?
- android - 错误:onFailure:com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: 应为 int 但为 57213780054