从控制器类javaFX场景生成器内部创建类的实例
我是新来的,完全自学成才 我有一个程序,它有各种函数,可以改变数组中的值,然后通过Midi输出 在我决定学习Scene builder之前,一切都很顺利。 这是一个精简版,突出了我的问题 我创建了一个带有一个按钮的GUI。每次按下该按钮,我都需要将数组中大于零的数字的值增加1。我的初始值是 01101 按按钮增加 02 02 按按钮增加 0303 按按钮增加 0 4 0 4等 问题是,在控制器类中,要访问主程序中的void,它需要创建一个实例,因此在按下一个按钮后,它不能超过0 2。 我需要在主程序类中保留所有数组,因为所有midi内容都在主程序类中生活和工作。 我为我的非技术性语言道歉 感谢阅读以下两个相关的代码文件从控制器类javaFX场景生成器内部创建类的实例,java,Java,我是新来的,完全自学成才 我有一个程序,它有各种函数,可以改变数组中的值,然后通过Midi输出 在我决定学习Scene builder之前,一切都很顺利。 这是一个精简版,突出了我的问题 我创建了一个带有一个按钮的GUI。每次按下该按钮,我都需要将数组中大于零的数字的值增加1。我的初始值是 01101 按按钮增加 02 02 按按钮增加 0303 按按钮增加 0 4 0 4等 问题是,在控制器类中,要访问主程序中的void,它需要创建一个实例,因此在按下一个按钮后,它不能超过0 2。 我需要在主
package zump;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Zump extends Application {
int[] myNoteArray = {0, 1, 0, 1};
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("zumpFXML.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
System.out.println("Main");
launch(args);
}
void octaveUp() {
System.out.println("Octave UP");
for (int i = 0; i < 4; i++) {
int fa4 = myNoteArray[i];
if (fa4 > 0 && fa4 < 4) {
myNoteArray[i] = fa4 + 1;
} // eo if }
}// eo for
//Print Array//
for (int i = 0; i < 4; i++) {
int fa6 = myNoteArray[i];
System.out.print(fa6);
System.out.print(" ");
}
System.out.println("");
}
}
你不应该每次按下按钮都创建一个实例——你应该只创建一次,然后每次按下按钮都访问一个实例 因此,实例的创建应该在事件处理程序之外,但是创建的实例应该对事件处理程序可用 例如,一种方法是将实例的创建移到一个级别之外:
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
assert button != null : "fx:id=\"button\" was not injected: check your FXML file 'zumpFXML.fxml'.";
final Zump t1 = new Zump();
button.setOnAction((ActionEvent event) -> {
System.out.println("That was easy, wasn't it?");
t1.octaveUp();
// Zump.octaveUp();
});
}
(final
在Java8中不是必需的,但它仍然有助于识别这是匿名类/lambda表达式内部使用的变量)
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
assert button != null : "fx:id=\"button\" was not injected: check your FXML file 'zumpFXML.fxml'.";
final Zump t1 = new Zump();
button.setOnAction((ActionEvent event) -> {
System.out.println("That was easy, wasn't it?");
t1.octaveUp();
// Zump.octaveUp();
});
}