正如标题所述,在构建表并将所有内容添加到表中的initialize方法和FXMLLoader之间存在一定的冲突,FXMLLoader应该为弹出窗口加载FXML。
我的代码:
主要内容:
import javafx.fxml.FXMLLoader;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
private TableView<Artikel> table;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Table View Sample");
stage.setWidth(1250);
stage.setHeight(1000);
Parent root = FXMLLoader.load(getClass().getResource("fxml1.fxml"));
Scene scene1 = new Scene(root,300,300);
stage.setScene(scene1);
stage.show();
}
FXML 1。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.event.ActionEvent?>
<?import javafx.geometry.Pos?>
<?import javafx.collections.FXCollections ?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.StackPane?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="150.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="Controller" stylesheets="stylesheet.css" spacing="4" fx:id="idScene" >
<TableView fx:id="idTable" >
</TableView>
<HBox alignment="TOP_RIGHT">
<Button fx:id="idNew" text ="Neu" onAction="#onNew"/>
</HBox>
</VBox>
控制器。
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class Controller implements Initializable {
@FXML
private Button idNew;
@FXML
private TableView idTable;
public void onNew(ActionEvent event) throws IOException {
Parent popUpFenster = FXMLLoader.load(getClass().getResource("fxml2.fxml"));
Scene scene2 = new Scene(popUpFenster,500,500);
Stage stage = new Stage();
stage.setScene(scene2);
stage.initModality(Modality.APPLICATION_MODAL);
stage.showAndWait();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
TableColumn place = new TableColumn("Platz");
TableColumn name = new TableColumn("Name");
TableColumn weight = new TableColumn("Gewicht");
TableColumn price = new TableColumn("Preis");
TableColumn amount = new TableColumn("Anzahl");
idTable.getColumns().addAll(place,name,weight,price,amount);
final ObservableList<Artikel> data = FXCollections.observableArrayList(
new Artikel(1,"Hallo Welt",4,5,3),
new Artikel(1,"Hallo Welt",5,3,4),
new Artikel(2,"Hallo Welt",4,3,1));
//Step : 3# Associate data with columns
place.setCellValueFactory(new PropertyValueFactory<Artikel,Integer>("Platz"));
name.setCellValueFactory(new PropertyValueFactory<Artikel,String>("Name"));
weight.setCellValueFactory(new PropertyValueFactory<Artikel,Integer>("Gewicht"));
price.setCellValueFactory(new PropertyValueFactory<Artikel,Integer>("Preis"));
amount.setCellValueFactory(new PropertyValueFactory<Artikel,Integer>("Anzahl"));
//Step 4: add data inside table
idTable.setItems(data);
}
public class Artikel {
private int Platz;
private String Name;
private int Gewicht;
private int Preis;
private int Anzahl;
public Artikel() {
this.Platz = 0;
this.Name = "Hallo Welt";
this.Gewicht= 0;
this.Preis = 0;
this.Anzahl = 0;
}
public Artikel(int Platz, String Name, int Gewicht, int Preis,int Anzahl) {
this.Platz = Platz;
this.Name = Name;
this.Gewicht = Gewicht;
this.Preis = Preis;
this.Anzahl = Anzahl;
}
public int getPlatz() {return this.Platz;};
public String getName () {return this.Name;}
public int getGewicht() {return this.Gewicht;};
public int getPreis() {return this.Preis;}
public int getAnzahl() { return this.Anzahl;}
}
}
Fxml2:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.event.ActionEvent?>
<?import javafx.geometry.Pos?>
<?import javafx.collections.FXCollections ?>
<?import javafx.geometry.Insets?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="290.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="Controller" stylesheets="stylesheet.css" fx:id="idPopUp">
<HBox alignment="CENTER">
<Label text="Platz"/>
<TextField fx:id="idPlace" />
</HBox>
</VBox>
问题是:如果你删除初始化或注释它-Neu按钮弹出-工作,如果没有-表格显示,但按钮弹出没有,似乎有冲突
在fxml2中。fxml
您有:fx:controller=“controller”
分配的控制器调用fxml2。fxml
by:Parent popUpFenster=FXMLLoader。加载(getClass()。getResource(“fxml2.fxml”)
所以
fxml2
调用Controller
,然后Controller
调用fxml2
......
问题内容: 我试图从一个简单的ArrayList的内容填充ListView。这是我的 Controller.java文件: 这是我的Style.fxml文件: 该程序运行,但是我输入的歌曲没有出现在ListView中(并且Song类确实具有toString方法)。 我能做什么? 问题答案: 问题是没有将控制器的初始化为预期问题的质询者。 Java 8中FXMLLoader的操作有点奇怪。 如果您在
初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如: model.add(Dense(64, kernel_initializer='random_uniform', bias
初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是init,例如: model.add(Dense(64, init='uniform')) 预定义初始化方法 uniform lecun_uniform: 即有输入节点数之平方根放缩后的均匀分布初始化(LeCun 98). normal identity:仅用于权值矩
我有一个JavaFX应用程序,它与用Java编写的控制器类一起使用FXML。在Java控制器中,在FXML节点初始化之前,我需要小心不要对其进行操作(否则我会得到一个NullPointerException),这在运行初始化方法之前是无法保证的。所以我发现自己经常这样做: 控制器在FXML文件中设置如下: 然后是Java文件中的控制器。 这是可行的,但它笨重且重复。我必须创建globalValue
我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?
我试图理解@bolov对删除默认构造函数问题的第一个公认答案。对象仍然可以创建......有时[1] 似乎我发现了一个错误,所以它搞乱了整个解释。 @bolov解释了为什么这段代码能够在c 11中成功编译: 场景A 以及为什么这段代码无法在c 11中编译: 场景C 他说,重点是第一个foo是聚合,第二个foo不是聚合。 然后他给出了cppreference的摘录: T类型对象的列表初始化的影响是: