在JavaFx中使用滑块更新GridPane
我是新手,我正在创建一个解N x N矩阵的字段,我希望微调器在每次我更改其值时添加更多的文本字段,这样用户就可以选择矩阵的大小,然后进行解算……但是我不知道如何做到这一点 我试图附加一个侦听器JavaFX微调器,但它不起作用,并且在代码中产生了一些错误 有问题的代码在JavaFx中使用滑块更新GridPane,javafx,Javafx,我是新手,我正在创建一个解N x N矩阵的字段,我希望微调器在每次我更改其值时添加更多的文本字段,这样用户就可以选择矩阵的大小,然后进行解算……但是我不知道如何做到这一点 我试图附加一个侦听器JavaFX微调器,但它不起作用,并且在代码中产生了一些错误 有问题的代码 public static void main(String[] args) { // TODO Auto-generated method stub launch(args); } public void star
public static void main(String[] args) {
// TODO Auto-generated method stub
launch(args);
}
public void start(Stage primaryStage) throws Exception{
Double[][] A = new Double[6][6];
Label tamanoML = new Label("Tamaño Matriz:");
Spinner tamanoMS =new Spinner(1,5,0,1);
int tamano=(int) tamanoMS.getValue();
int r;
Label[] campoL = new Label[6];
TextField campo [][] = new TextField[6][6];
Button resolverB = new Button("Resolver matrix");
resolverB.setOnAction((ActionEvent t) -> {
int n=(int) tamanoMS.getValue();
int cont=0;
for(int i=0; i<n; i++) {
for(int j=0; j<n+1; j++) {
A[i][j]=Double.parseDouble(campo[i][j].getText());
}
}
for (int a = 0; a < n; a++) {
Double temp = 0.0;
temp = A[cont][cont];
for (int y = 0; y < (n + 1); y++) {
A[cont][y] = A[cont][y] / temp;
}
for (int x = 0; x < n; x++) {
if (x!=cont) {
Double c = A[x][cont];
for (int z = 0; z < (n + 1); z++) {
A[x][z] = ((-1 * c) * A[cont][z]) + A[x][z];
}
}
}
cont++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
campo[i][j].setText(""+A[i][j]);
}
}
});
Button limpiarb = new Button("Limpiar");
limpiarb.setOnAction((ActionEvent t) -> {
for(int i=0; i<tamano+1; i++) {
for(int j=0; j<tamano+1; j++) {
campo[i][j].setText("0");
}
}
});
GridPane mainPane = new GridPane();
mainPane.setMinSize(650,350);
mainPane.setPadding(new Insets(10,10,10,10));
mainPane.setVgap(5);
mainPane.setHgap(5);
mainPane.setAlignment(Pos.CENTER);
mainPane.add(tamanoML, 0, 0);
mainPane.add(tamanoMS, 1, 0);
mainPane.add(resolverB,0,1);
mainPane.add(limpiarb,1,1);
for(int i=0; i<tamano+1; i++) {
r=i+1;
if(r<tamano+1) {
r=i+1;
campoL[i]=new Label("X"+r);
mainPane.add(campoL[i],i,2);
}else {
campoL[i]=new Label("R");
mainPane.add(campoL[i],i,2);
}
}
for(int i=0; i<tamano; i++) {
for(int j=0; j<tamano+1; j++) {
campo[i][j] = new TextField("0");
mainPane.add(campo[i][j],j,i+3);
}
}
tamanoMS.valueProperty().addListener((newValue) -> {
int s;
for(int i=0; i<tamano+1; i++) {
s=i+1;
if(s<tamano+1) {
s=i+1;
campoL[i]=new Label("X"+s);
mainPane.add(campoL[i],i,2);
}else {
campoL[i]=new Label("R");
mainPane.add(campoL[i],i,2);
}
}
for(int i=0; i<tamano; i++) {
for(int j=0; j<tamano+1; j++) {
campo[i][j] = new TextField("0");
mainPane.add(campo[i][j],j,i+3);
}
}
s=0;
});
Scene scene = new Scene(mainPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Ventas del Dia");
primaryStage.show();
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
发射(args);
}
public void start(Stage primaryStage)引发异常{
Double[][]A=新的Double[6][6];
标签tamanoML=新标签(“Tamaño Matriz:”);
微调器tamanoMS=新微调器(1,5,0,1);
int tamano=(int)tamanoMS.getValue();
INTR;
标签[]campoL=新标签[6];
TextField campo[][]=新TextField[6][6];
按钮分解器B=新按钮(“分解器矩阵”);
resolverB.setOnAction((ActionEvent t)->{
int n=(int)tamanoMS.getValue();
int cont=0;
对于(inti=0;i好的,那么您要做的第一件事就是像这样重写您的侦听器
tamanoMS.valueProperty().addListener((obs,oldValue,newValue)->{
系统输出打印项次(“听说”);
int-s;
对于(inti=0;i好的,那么您要做的第一件事就是像这样重写您的侦听器
tamanoMS.valueProperty().addListener((obs,oldValue,newValue)->{
系统输出打印项次(“听说”);
int-s;
对于(int i=0;i它导致的确切错误是什么?它导致的确切错误是什么?原因是由于使用了addListener
的方法签名,基于使用了一个使用1个参数的lambda表达式的事实,也就是说,唯一可能的情况是使用invalizationListener
作为参数(newValue
在本例中是一个错误选择的名称,因为参数包含的是可观察的
,而不是存储在其中的值)。属性值从未被读取(其本身表示逻辑错误)“这一事实告诉”属性它不再需要触发侦听器,因为它已经“告知”侦听器发现发生了一些更改。原因是,由于使用了addListener
的方法签名,基于这样一个事实,即使用了使用1个参数的lambda表达式,也就是说,唯一可能的是使用invalizationListener
作为参数的lambda表达式(newValue
在本例中是一个错误选择的名称,因为参数包含的是可观察的
,而不是存储在其中的值)。属性值从未被读取(其本身表示逻辑错误)“这一事实告诉”属性它不再需要触发侦听器,因为它已经“告知”听众说发生了一些变化。