将用户的选择从一个ListView移动到另一个ListView Java FX

时间:2014-11-24 23:26:27

标签: javafx fxml

下面的代码包含两个Listview,用户将从第一个列表视图中选择一个名称,当点击添加按钮时,它会将内容移动到第二个List视图应该更新并显示为的数组做出改变。

我认为我们通过将选择转换为字符串然后将其添加到数组来获得正确的想法。但是当试图打印阵列用于测试目的时,没有任何东西出现。

任何反馈或帮助将不胜感激

package poolproject;

import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;

/**
 *
 * @author Alex
 */
public class FXMLDocumentController implements Initializable {

    @FXML
    private Button BtnAdd;

    @FXML
    private ListView<String> boxTeam;

    @FXML
    private ListView<String> boxPlayers;

    ArrayList<String> team= new ArrayList();
    String player;

    final ObservableList<String> playersAvailable = FXCollections.observableArrayList(
            "Kardi","Gilmore","Clark");

    final ObservableList<String> teamOutput = FXCollections.observableArrayList(team);

    @FXML
    private void deleteAction(ActionEvent action){
        int selectedItem = boxPlayers.getSelectionModel().getSelectedIndex();
        player = Integer.toString(selectedItem);
        team.add(player);

        playersAvailable.remove(selectedItem);
    }


    @Override
    public void initialize(URL url, ResourceBundle rb) {

        boxPlayers.setItems(playersAvailable);
        boxTeam.setItems(teamOutput);


    }    

}

1 个答案:

答案 0 :(得分:2)

将项添加到普通列表不会导致更新被触发(ArrayList没有注册任何侦听器的机制)。将项添加到ObservableList将导致通知听众。

待办事项

String selectedItem = boxPlayers.getSelectionModel().getSelectedItem();
playersAvailable.remove(selectedItem);
teamOutput.add(selectedItem);