JavaFX pola textField w tablicy

JavaFX pola textField w tablicy
SL
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:6
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:

Kopiuj
	    @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:

Kopiuj
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

edytowany 1x, ostatnio: splinterLepton
SU
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

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

SL
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:6
0

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

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

czy

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

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

Kopiuj
 
    	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ć.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
SL
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:6
0

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

Kopiuj
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.

bogdans
Nie byłeś łaskaw napisać, że próbowałeś tej składni.
dymul
  • Rejestracja:około 11 lat
  • Ostatnio:ponad rok
  • Postów:182
1
Kopiuj
@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.

edytowany 1x, ostatnio: dymul

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.