我正在创建一个应用程序,将FXML和常规javaFX结合起来创建一个应用程序。然而,我在为生成自定义窗口的称为AddItemWindow的阶段子类编写事件处理程序时遇到了问题。
该应用程序显示库存中的物品(钥匙和武器)列表。用户可以添加项目,需要按下按钮添加他选择的项目(添加键或添加武器)。
然后弹出一个新窗口,用户必须在其中输入相关数据。它将生成一个包含文本字段的网格窗格,用户可以在其中输入数据。这将是一个自定义网格窗格,具体取决于项目类型。然后,它将加载FXML并添加GridPane。
使用下面的代码,我正在为取消窗口或确认新项目的按钮的SetOnAction代码获取LoadExceptions。
有人知道我在哪里出错吗?
/*启动类*/主包;
//imports from javafx and java
import domain.DomainController;
import gui.OverviewWindow;
public class StartUpGUI extends Application {
@Override
public void start(Stage primaryStage) {
Parent root = new OverviewWindow(new DomainController());
Scene scene = new Scene(root);
primaryStage.setTitle("Weapons and Keys");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String... args) {
Application.launch(StartUpGUI.class, args);
}
}
/*OverviewWindow,BorderPane*/包gui的子类;
//imports from javafx and java
import domain.DomainController;
import domain.ItemType;
public class OverviewWindow extends BorderPane{
@FXML
private Button btnAddWeapon;
@FXML
private Button btnAddKey;
@FXML
private TextArea txaOverview;
private DomainController dc;
this.dc = dc;
FXMLLoader loader = new FXMLLoader(getClass().getResource("OverviewWindow.fxml"));
loader.setRoot(this);
loader.setController(this);
try{
loader.load();
txaOverview.setText(dc.showOverview()); // showOverview returns a String containing a toString of all items in the inventory
}
catch (IOException ex){
throw new RuntimeException(ex);
}
}
@FXML
public void btnAddWeaponOnAction(ActionEvent event){
try{
add(ItemType.WEAPON); // ItemType is an Enum where all the properties of the items are defined; for Weapon: name, weight, level, power, used(boolean)
}
catch (Exception e){
throw e;
}
}
@FXML
public void btnAddKeyOnAction(ActionEvent event){
try{
add(ItemType.SLEUTEL); // ItemType is an Enum where all the properties of the items are defined; for Key: name, weight, level, door
}
catch (Exception e){
throw e;
}
}
private void add(ItemType itemType){
Stage stage = new Stage();
stage.setTitle(itemType== VoorwerpSoort.WEAPON ? "Add Weapon" : "Add Key");
AddItem addItem = new AddItem(dc,itemType,this);
addItem.setOnHiding(new EventHandler<WindowEvent>(){
@Override
public void handle(WindowEvent e){
txaOverview.setText(dc.showOverview()); // when we close the AddItemWindow, we will update the item overview by having the domain controller get this data from the repository
}
});
addItem.show();
}
}
/*AddItemWindow,舞台*/包gui的子类;
// import relevant javafx and java classes
import domain.DomainController;
import domain.ItemType;
public class AddItemWindow extends Stage {
@FXML
private BorderPane addRoot;
@FXML
private Button btnOK;
@FXML
private Button btnCancel;
private DomainController dc;
private ItemType itemType;
private Parent parent;
private TextField[] txfAttributes;
public AddItemWindow(DomainController dc, ItemType itemType, OverviewWindow overviewWindow){
this.dc = dc;
this.itemType = itemType;
this.parent = overviewWindow;
this.setScene(buildGUI(dc,itemType,overviewWindow));
}
private Scene buildGUI(DomeinController dc, VoorwerpSoort vwps, OverzichtSchermController ovsController){
Parent root = new BorderPane();
GridPane properties = new GridPane();
properties.setPadding(new Insets(10));
properties.setHgap(10);
properties.setVgap(10);
ColumnConstraints col1 = new ColumnConstraints();
col1.setHalignment(HPos.RIGHT);
ColumnConstraints col2 = new ColumnConstraints();
properties.getColumnConstraints().addAll(col1, col2);
String[] attributes = itemType.attributeNames();
txfAttributes = new TextField[attributes.length];
for(int i = 0; i<attributes.length; i++){
properties.add(new Label(attributes[i]),0,i);
properties.add(txfAttributes[i] = new TextField(),1,i);
}
((BorderPane) root).setCenter(properties);
FXMLLoader loader = new FXMLLoader(getClass().getResource("AddItemWindow.fxml"));
loader.setRoot(root);
loader.setController(root);
try{
loader.load();
return new Scene(root);
}
catch(IOException e){
throw new RuntimeException(e);
}
}
// NOT WORKING
@FXML
public void btnOKOnAction(){
addItem();
}
// NOT WORKING
@FXML
public void btnCancelOnAction(ActionEvent event){
hide();
}
private void voorwerpToevoegen(){ // we're calling the domaincontroller to add the new item to the repository
switch (itemType)
{
// for the item, add an item by getting the value of each TextField, which are the
// parameters for a constructor of the new item
case WEAPON:
dc.addWeapon(txfAttributes[0].getText(),
Double.parseDouble(txfAttributes[1].getText()),
Integer.parseInt(txfAttributes[2].getText()),
Integer.parseInt(txfAttributes[3].getText()),
Boolean.parseBoolean(txfAttributes[4].getText()));
break;
case KEY:
dc.addKey(txfAttributes[0].getText(),
Double.parseDouble(txfAttributes[1].getText()),
Integer.parseInt(txfAttributes[2].getText()),
Integer.parseInt(txfAttributes[3].getText()));
break;
}
hide();
}
}
顶部有FXML private Button btnOK 哪一个好。
要在Java代码中指定按钮的操作,可以在您的buildGUI()方法中使用此Java 8语法(请参阅JavaFX 8事件处理示例):
btnOK.setOnAction((event) -> addItem());
如果未使用Java8,请参阅UI控件示例。
您不需要用FXML注释方法。
我用Java写了Tic-Tac-Toe。我似乎遇到的问题是,当(人类)播放器1和(计算机)播放器2之间出现平局时,GUI会冻结。我已经在“Buttonlistener”类和“Methods”中创建了一个tieCheck,以获得一个平局。 我的程序的工作方式是,当按下一个按钮时,它会将一个值传递给methods类中的数组。在这个数组中,1=玩家1,2=玩家2。 人类玩家总是先走,所以当人类玩家走了4
当我点击一个按钮,JInternalFrame出现,我想迫使用户只能点击那个内部框架(外部框架应该被禁用),就在他关闭内部框架时,他可以使用外框。 我该怎么做?谢谢
我有一个二维数组(矩阵),尺寸为50x50。在这些矩阵中,每个位置的值为 0 或 1。此矩阵由具有 50x50 按钮的网格布局呈现,如果值为 0 或 1,则这些按钮为白色或黑色。如果我按下一个按钮,矩阵中的相关位置应该将值更改为1。为了实现这一点,我为每个矩阵位置创建了一个按钮的网格,由for循环执行。我还为此 for 循环中的每个按钮实现了一个 ActionListener。我尝试使用 Acti
我目前正在处理这段代码,它在主页面之前实现了一个登录页面。代码如下: 因此,仅登录页面就可以工作,使用正确的凭据,我们会得到JOption MessageDialog,证明凭据是正确的。当我尝试在我的主类中实现它时,它会在主框架前面打开,如下所示: 有没有人知道到底需要改变什么才能作为一个整体出现?
我正在经历JavaAWT 例如,在这篇文章中-如何求解三角方程cos(πθ/β)−cos(2πθ/β)=0? 用户给出了一些复杂的方程式,并展示了图形的外观。 但是我们如何为这个等式编写一个Java的程序来生成图形GUI作为输出呢? 有人能给我指一些文档或链接,让我了解如何用Java实现这一点吗? 提前感谢。
我正在开发一个JAVA Gui。 我有一个Jpanel,我可以向它添加一个Jlabel,然后将它拖到面板内的其他地方。然后我可以创建一个新的Jlabel,以此类推。我无法解决的问题是,当创建新的JLabel并将其添加到面板时,面板调用repaint()。现有标签和新JLabel已对齐。添加新标签时,我希望现有标签保留在其位置。 有什么建议吗?谢谢你!
所以在这里,就像这张图片一样,我需要在一个txt文件中显示我拥有的门票的统计信息。在我的文件中,我使用“,”分隔了4个字段,但我不知道如何在GUI中单独显示它们,即,对于Ticket price下的4个字段,我需要显示价格,这是我txt文件中每行的第2部分,对于Ticket Amounts,则是文件中每行的第3部分。那么我该如何向他们展示呢?我已经设置了一个演示它应该是什么样子,对于图片中的每种类
有没有办法在使用 jongo 查询 MongoDB 时添加 ?我发现这样的错误 - '排序超出了 104857600 字节的内存限制,但没有选择加入外部排序。正在中止操作。传递 allowDiskUse:true 可以选择加入,可以通过以下方式阻止,您的聚合看起来像 但据我所知,Jongo 中的类仅将管道应用于自身,然后您可以使用 方法执行。 是否有任何方法可以将该参数传递给mongo而不从Jon