2016-11-17 66 views
4

在我的javafx項目中,我得到了一個包含多個值的組合框。當我的應用程序開始時,我執行以下操作:更新javafx中的gridPane

gui.course_P = new ComboBox<String>(); 
    for (int i = 1; i < gui.columns.size(); i++) { 
     gui.course_P.getItems().add(gui.columns.get(i)); 
} 

gui.createTestButtonPane.add(gui.course_P, 2, 1); 

其中gui.columns是一個字符串列表。

同時在應用程序中可以更改此值。然而,因爲我已經將這個組合框添加到我的GridPane,然後當這個值改變(gui.columns)時,我的場景新的值沒有顯示在組合框。因爲我已經添加了舊的gui.course。有沒有辦法用新的gui.course_P更新createTestButtonPane?

編輯:我所試圖做的是對的組合框添加值上的監聽器,然後重新添加它到gridPane:

String temp1 = course_name.getText(); 
gui.course_P = new ComboBox<String>(); 
gui.course_P.getItems().add(temp1);  
//gui.createTestButtonPane.add(gui.course_P, 2, 1); 

該課程是正確添加到組合框,但隨後當我再次將組合框添加到gridpane時,我有兩個comboBox。我想要的只是將gui.course更新到我的gridPane。

EDIT2:我跟着我的代碼的答案帖子的例子。

//gui.course_P = new ComboBox<>(gui.columns); 
    gui.course_P = new ComboBox<String>(); 
    for (int i = 1; i < gui.columns.size(); i++) { 
     gui.course_P.getItems().add(gui.columns.get(i)); 
    } 

問題是,我想從列表中除了第一個元素以外的所有東西。 當我使用gui.course_P = new ComboBox<>(gui.columns);而不是for循環時,它正在工作,但由於某種原因,我有兩次列表中的元素,而且我還得到了第一個項目。我可以在沒有第一項的情況下添加它嗎?

+0

添加組件或項監聽組合框,如果你再更改值刪除舊,並添加新的 – XtremeBaumer

+0

添加我的問題。我在監聽器上添加新值,但是我想在監聽器上更新gridPane的內容。 –

+0

你可以刪除舊的/覆蓋它嗎? – XtremeBaumer

回答

2

這對我來說很好。無論何時按下按鈕,都會將新項目添加到組合框中。我只是使用了一個ObservavleList<String>作爲組合框的item屬性。無需清除或重新添加。

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class ComboBoxTest extends Application { 
    private ObservableList<String> source = FXCollections.observableArrayList(); 

    @Override 
    public void start(Stage primaryStage) { 
     Pane root = createPane(); 
     primaryStage.setScene(new Scene(root)); 
     primaryStage.show(); 
    } 

    private Pane createPane() { 
     GridPane pane = new GridPane(); 
     Button addButton = new Button("add new item"); 
     addButton.setPrefWidth(150); 
     addButton.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       source.add("Item" + source.size()); // editing the source 
      } 
     }); 

     ComboBox<String> comboBox = new ComboBox<>(source); 

     pane.add(addButton, 1, 0); 
     pane.add(comboBox, 1, 1); 
     pane.setPrefHeight(200); 
     pane.setPrefWidth(200); 
     return pane; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

0 - 初始狀態:

enter image description here

1 - 按鈕被按下:

enter image description here

2 - 再次按下按鈕:

enter image description here

+0

當我試圖將我的ArrayList轉換爲可觀察列表時,出現錯誤我無法正確導入庫 –

+0

不是,它是純Java 8代碼,也許你有錯誤的Java版本(必須是8),我在代碼中包含'impotrs',我希望它有幫助。 'ObservableList',有一個'FXCollections.observableArrayList'的構造函數,它接受'Collection'並因此''ArrayList' – Omid

+0

eclipse導入自動完成不能正常工作。現在它工作正常! –