JavaFX pola textField w tablicy

0

Cześć!
Jest to mój pierwszy post, więc witam wszystkich :)
Natrafiłem na pewien problem, otóż moja aplikacja posiada kolumnę pól tekstowych:

	    @FXML
	    private TextField name1;
	
	    @FXML
	    private TextField name2;
	
	    @FXML
	    private TextField name3;
	
	    @FXML
	    private TextField name4;

Chciałbym uzyskać do nich dostęp używając indeksów, ponieważ bardzo nieefektywne jest pisanie w ten sposób:

switch (nextField) { 
            			case 1:
            				name1.setText(newName.getText());
            				name1.setVisible(true);
            				break;
            			case 2:
            				name2.setText(newName.getText());
            				name2.setVisible(true);
            				break;
            			case 3:
            				name3.setText(newName.getText());
            				name3.setVisible(true);
            				break;
            			case 4:
            				name4.setText(newName.getText());
            				name4.setVisible(true);
            				break;
}

Proszę o pomoc, ponieważ nie mogę dojść do tego, w jaki sposób to zrobić.

Pozdrawiam

0

To co Ciebie powstrzymuje żeby wrzucić TextField-y do tablicy? A później się dostawać do nich po indeksie?

0

Powstrzymuje mnie nieznajomość składni :) Nie mogę nigdzie znaleźć sposobu, by to zadeklarować. Próbowałem:

	    @FXML
	    private TextField [] names {name1, name2, name3, name4};
 

czy

	    @FXML
	    private TextField [] names = {name1, name2, name3, name4};
 

Nic nie działa. W pewnym sensie poradziłem sobie z tym pisząc takie metody:

 
    	public void setName(String name, int i) {
    		switch (i) {
    			case 1: name1.setText(name); break;
    			case 2: name2.setText(name); break;
    			case 3: name3.setText(name); break;
    			case 4: name4.setText(name); break;
    			case 5: name5.setText(name); break;
    			case 6: name6.setText(name); break;
    			case 7: name7.setText(name); break;
    			case 8: name8.setText(name); break;
    			case 9: name9.setText(name); break;
    			case 10: name10.setText(name); break;
    			case 11: name11.setText(name); break;
    			case 12: name12.setText(name); break;
    		}
		}
    	
    	public String getName(int i) {
    		switch (i) {
    			case 1: return name1.getText();
    			case 2: return name2.getText();
    			case 3: return name3.getText();
    			case 4: return name4.getText();
    			case 5: return name5.getText();
    			case 6: return name6.getText();
    			case 7: return name7.getText();
    			case 8: return name8.getText();
    			case 9: return name9.getText();
    			case 10: return name10.getText();
    			case 11: return name11.getText();
    			case 12: return name12.getText();
    			default: return "";
    		}
		}

W tym wypadku zestaw case'ów jest tylko raz w kodzie, ale nadal łatwiej byłoby odwoływać się w stylu name[i].getText(); , ale nijak nie mogę wpaść, jak to zainicjować.

0

Może przed rozpoczęciem programowania warto poznać składnię?

private TextField [] names = new TextField[]{name1, name2, name3, name4};
0

Bardzo bym chciał, żeby to działało. Taką składnię znam i próbowałem. Wyrzuca:

Exception in Application start method
java.lang.reflect.InvocationTargetException
name1 cannot be resolved to a variable
name2 cannot be resolved to a variable
name3 cannot be resolved to a variable
name4 cannot be resolved to a variable
 

Dlatego później próbowałem jakieś inne, nic nie przechodzi.

1
@FXML
 private TextField name1;
 
@FXML
private TextField name2;
 
@FXML
private TextField name3;
 
@FXML
private TextField name4;

private TextField[] fields;

@FXML
private void initialize() {
    fields  = new TextField[] {name1, name2, name3, name4 };
}

Metoda initialize jest wykonywana po zainicjowaniu pól oznaczonych adnotacją @FXML, wtedy można je spokojnie dodać do tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1