Wstawianie parametru do konstruktora w pętli

0

Witam serdecznie :)

Mam problem i nie do końca rozumiem dlaczego mi to nie działa - jedynie się domyślam ale wolę się upewnić ;)

Mój kod wygląda (pisane w javaFX)

public class CreaterTabPane extends TabPane{
	
	private String[] monthsNameString = {"Styczeń","Luty","Marzec","Kwiecien","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"};
	private MonthTabCreater[] monthsTab;
	
	
	
	public CreaterTabPane(){
		this.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);
		this.setSide(Side.TOP);
		
		monthsTab = new MonthTabCreater[monthsNameString.length];
		ComboBox<String> monthsComboBox = new ComboBox<>();
		nameComboBox.setValue("");
		nameComboBox.setPromptText("Podaj nazwę");
		nameComboBox.setEditable(true);
		nameComboBox.setVisibleRowCount(10);
		ObservableList<String> dateMonthsObservableList = FXCollections.observableArrayList();
		monthsComboBox.setItems(dateMonthsObservableList);
		
		for(int i=0;i<monthsNameString.length;i++){
			monthsTab[i] = new MonthTabCreater(monthsNameString[i],monthsComboBox,dateMonthsObservableList);
			this.getTabs().add(monthsTab[i]);
		}
	}
}

A tutaj klasa monthTabCreater

public class MonthTabCreater extends Tab{
	public MonthTabCreater(String title,ComboBox<String> comboBox,ObservableList<String> observableList){
		super(title);

		VBox addBox = new VBox(8);
		addBox.setPadding(new Insets(15));
		addBox.getChildren().addAll(hBox,nameComboBox,costTextField,addButton);
		gridPane.add(addBox, 2, 0);

tutaj skróciłem kod bo on ma ponad 100 linijek ale myślę, że to już wystarczy.

4prog.png

To może powiem co chce zrobić. Jak widać na zdjęciu chce utworzyć 12 takich samych zakładek ze wspólnym comboBox-em ale jak tworzę obiekt tak jak w kodzie to comboBox dodaje się tylko do ostatniej zakładki i nie wiem właśnie dlaczego tak się dzieje.

0

Trochę mało informacji zamieściłeś.
Nie wiem czy jest to celowe ale tworzysz jedną instancję comboboxa, więc wygląda na to, że wszystkie zakładki mają referencje do jednego i tego samego obiektu.

Nawiasem mówiąc, skoro wszystkie zakładki wyglądają tak samo to nie lepiej mieć jedną i miesiąc wybierać z comboboxa?

1

Odpowiadaj w postach, żebym nie pisał sam do siebie :)

Moim zdaniem kwestia dotyczy tego, że jest tylko jedna instancja combo.
Spróbuj zastosować zmienną lokalną i sprawdź czy jest okay.(Pamiętaj, że za każdym razem tworzysz nową instancję combo)

    for(int i=0;i<monthsNameString.length;i++){
           ComboBox<String> monthsComboBox = new ComboBox<>();
            monthsTab[i] = new MonthTabCreater(monthsNameString[i],monthsComboBox,dateMonthsObservableList);
            this.getTabs().add(monthsTab[i]);
        }
0

Ha problem rozwiązany :)

Wstawiłem tak jak napisałeś wyżej ale 'dataMonthsObservableList' zostawiłem 'stare' przez co pomimo, że jest to nowe ComboBox to i tak korzysta ze 'dataMonthsObservableList' przez co jak wpiszę, np w lutym jakąś nazwę to zostanie ona dodana do 'datadataMonthsObservableList' i w każdym innym ComboBox-ie będzie dostępna :)

Też, że nie pomyślałem o tym wcześniej ...

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