如何在 for 循环中使用从一个 class 到另一个的传递值?
How can you use a passed value from one class to another in a for loop?
所以我有一个用户字段,他们可以输入 1-10 作为玩家数量:
playersFld.setTextFormatter(new TextFormatter<String>(playersValidator));
custartBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent4 -> {
Integer playersNum = Integer.valueOf(playersFld.getText());
if (!playersNum.equals("")) {
System.out.println("Got the values");
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
root = loader.load();
ScorePageCtrl scorePageCtrl = loader.getController();
scorePageCtrl.displayDate(strDate);
scorePageCtrl.recievePlayers(playersNum);
stage = (Stage) ((Node) actionEvent4.getSource()).getScene().getWindow();
scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("missing value(s)");
}
});
我用这个方法将它传递给下一页的控制器:
public int recievePlayers(int plrNum){
System.out.println("Players: " + plrNum);
return plrNum;
}
sout 让我知道我得到了正确的数字,但我似乎无法将 returned 值传递给 for 数组
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= recievePlayers(); i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
我试过方法名,整数名,making int p;然后将其附加到 return,但似乎没有任何效果。
编辑:
所以我试过改变一些东西,我可以让它工作,但出于某种原因,它每隔一段时间就会触发一次,这不太理想。
我改了:
public static int plrNum;
public int receivePlayers(int players) {
System.out.println("Players: " + players);
//Used to make sure I get the number datesSP.setText(String.valueOf(players));
return this.plrNum = players;
}
然后用它来实例化,这样我就可以把它放在 for 循环中:
int n = plrNum;
但必须有更好的方法。
编辑:所以我更新了我的要点以反映当前正在运行的代码,但由于某种原因它只能每隔一段时间运行一次。
https://gist.github.com/Spider-Ian/3d5c777171d7ad632e9b71943fcf950c
你的方法有一个参数,但你调用它时没有。改成
public int recievePlayers() {
它应该可以工作。
小费!改成
public int receivePlayers() {
使其更易于使用。
例如,这种方式也可以。
public class Player {
public int num;
public int recievePlayers(int plrNum){
System.out.println("Players: " + plrNum);
return this.num = plrNum;
}
}
public static void main(String[] args) {
Player player = new Player();
player.recievePlayers(3);
int n = player.num;
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= n; i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
}
好吧,控制器中显然有一个非常严格的事件过程。它加载 FXML 项目,初始化,然后寻找其他方法和有趣的东西来玩。所以,确保选项卡首先获取数据的方法,我可以用之前的控制器提前调用它们。
threeThirBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent1 -> {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
root = loader.load();
ScorePageCtrl scorePageCtrl = loader.getController();
scorePageCtrl.displayDate(strDate);
scorePageCtrl.displayEvent("3 x 30");
scorePageCtrl.receivePlayers(3);
scorePageCtrl.receivePlays(3);
scorePageCtrl.receiveRounds(30);
//**Here is where I told the method to get the returned value before initialization**
scorePageCtrl.addTabs();
scorePageCtrl.addRows();
stage = (Stage) ((Node) actionEvent1.getSource()).getScene().getWindow();
scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
//TODO: Set the row and column numbers to thirty rows and three columns
System.out.println("3 x 30 button clicked");
});
我确实必须将 AtomicInteger 从初始化中移出并移到它自己的方法中。
public void addTabs() {
int plr = plrNum;
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= plr; i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
addPlayerBtn.setOnAction(event -> {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
});
}
唯一让我不满意的是将 return 的 get 值作为一个可用的整数来获取值的次数。
所以我有一个用户字段,他们可以输入 1-10 作为玩家数量:
playersFld.setTextFormatter(new TextFormatter<String>(playersValidator));
custartBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent4 -> {
Integer playersNum = Integer.valueOf(playersFld.getText());
if (!playersNum.equals("")) {
System.out.println("Got the values");
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
root = loader.load();
ScorePageCtrl scorePageCtrl = loader.getController();
scorePageCtrl.displayDate(strDate);
scorePageCtrl.recievePlayers(playersNum);
stage = (Stage) ((Node) actionEvent4.getSource()).getScene().getWindow();
scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("missing value(s)");
}
});
我用这个方法将它传递给下一页的控制器:
public int recievePlayers(int plrNum){
System.out.println("Players: " + plrNum);
return plrNum;
}
sout 让我知道我得到了正确的数字,但我似乎无法将 returned 值传递给 for 数组
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= recievePlayers(); i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
我试过方法名,整数名,making int p;然后将其附加到 return,但似乎没有任何效果。
编辑: 所以我试过改变一些东西,我可以让它工作,但出于某种原因,它每隔一段时间就会触发一次,这不太理想。
我改了:
public static int plrNum;
public int receivePlayers(int players) {
System.out.println("Players: " + players);
//Used to make sure I get the number datesSP.setText(String.valueOf(players));
return this.plrNum = players;
}
然后用它来实例化,这样我就可以把它放在 for 循环中:
int n = plrNum;
但必须有更好的方法。
编辑:所以我更新了我的要点以反映当前正在运行的代码,但由于某种原因它只能每隔一段时间运行一次。
https://gist.github.com/Spider-Ian/3d5c777171d7ad632e9b71943fcf950c
你的方法有一个参数,但你调用它时没有。改成
public int recievePlayers() {
它应该可以工作。
小费!改成
public int receivePlayers() {
使其更易于使用。
例如,这种方式也可以。
public class Player {
public int num;
public int recievePlayers(int plrNum){
System.out.println("Players: " + plrNum);
return this.num = plrNum;
}
}
public static void main(String[] args) {
Player player = new Player();
player.recievePlayers(3);
int n = player.num;
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= n; i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
}
好吧,控制器中显然有一个非常严格的事件过程。它加载 FXML 项目,初始化,然后寻找其他方法和有趣的东西来玩。所以,确保选项卡首先获取数据的方法,我可以用之前的控制器提前调用它们。
threeThirBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent1 -> {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
root = loader.load();
ScorePageCtrl scorePageCtrl = loader.getController();
scorePageCtrl.displayDate(strDate);
scorePageCtrl.displayEvent("3 x 30");
scorePageCtrl.receivePlayers(3);
scorePageCtrl.receivePlays(3);
scorePageCtrl.receiveRounds(30);
//**Here is where I told the method to get the returned value before initialization**
scorePageCtrl.addTabs();
scorePageCtrl.addRows();
stage = (Stage) ((Node) actionEvent1.getSource()).getScene().getWindow();
scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
//TODO: Set the row and column numbers to thirty rows and three columns
System.out.println("3 x 30 button clicked");
});
我确实必须将 AtomicInteger 从初始化中移出并移到它自己的方法中。
public void addTabs() {
int plr = plrNum;
AtomicInteger tabs = new AtomicInteger(2);
for (int i = 2; i <= plr; i++) {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
}
addPlayerBtn.setOnAction(event -> {
if (tabs.get() <= 10) {
tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
tabPaneSP.getSelectionModel().selectLast();
} else {
System.out.println("No more homies");
}
});
}
唯一让我不满意的是将 return 的 get 值作为一个可用的整数来获取值的次数。