java removeall 不起作用_java – ListView – removeAll不起作用?

(这是Carl Dea出版的“

JavaFX 2.0示例”一书中的代码 – 代码示例在Apress免费提供,所以我确定他们不介意我在这里使用它)

我有完美的示例代码

package javafx2introbyexample.chapter1.recipe1_11;

import javafx.application.Application;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.geometry.HPos;

import javafx.geometry.Insets;

import javafx.geometry.VPos;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

import javafx.scene.control.ListView;

import javafx.scene.layout.GridPane;

import javafx.scene.layout.VBox;

import javafx.scene.paint.Color;

import javafx.stage.Stage;

/**

*

* @author cdea

*/

public class CreatingAndWorkingWithObservableLists extends Application {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

Application.launch(args);

}

@Override

public void start(Stage primaryStage) {

primaryStage.setTitle("Chapter 1-11 Creating and Working with ObservableLists");

Group root = new Group();

Scene scene = new Scene(root, 400, 250, Color.WHITE);

// create a grid pane

GridPane gridpane = new GridPane();

gridpane.setPadding(new Insets(5));

gridpane.setHgap(10);

gridpane.setVgap(10);

// candidates label

Label candidatesLbl = new Label("Candidates");

GridPane.setHalignment(candidatesLbl, HPos.CENTER);

gridpane.add(candidatesLbl, 0, 0);

Label heroesLbl = new Label("Heroes");

gridpane.add(heroesLbl, 2, 0);

GridPane.setHalignment(heroesLbl, HPos.CENTER);

// candidates

final ObservableList candidates = FXCollections.observableArrayList("Superman",

"Spiderman",

"Wolverine",

"Police",

"Fire Rescue",

"Soldiers",

"Dad & Mom",

"Doctor",

"Politician",

"Pastor",

"Teacher");

final ListView candidatesListView = new ListView(candidates);

candidatesListView.setPrefWidth(150);

candidatesListView.setPrefHeight(150);

gridpane.add(candidatesListView, 0, 1);

// heros

final ObservableList heroes = FXCollections.observableArrayList();

final ListView heroListView = new ListView(heroes);

heroListView.setPrefWidth(150);

heroListView.setPrefHeight(150);

gridpane.add(heroListView, 2, 1);

// select heroes

Button sendRightButton = new Button(">");

sendRightButton.setOnAction(new EventHandler() {

public void handle(ActionEvent event) {

String potential = candidatesListView.getSelectionModel().getSelectedItem();

if (potential != null) {

candidatesListView.getSelectionModel().clearSelection();

candidates.remove(potential);

heroes.add(potential);

}

}

});

// deselect heroes

Button sendLeftButton = new Button("

sendLeftButton.setOnAction(new EventHandler() {

public void handle(ActionEvent event) {

String notHero = heroListView.getSelectionModel().getSelectedItem();

if (notHero != null) {

heroListView.getSelectionModel().clearSelection();

heroes.remove(notHero);

candidates.add(notHero);

}

}

});

VBox vbox = new VBox(5);

vbox.getChildren().addAll(sendRightButton,sendLeftButton);

gridpane.add(vbox, 1, 1);

GridPane.setConstraints(vbox, 1, 1, 1, 2,HPos.CENTER, VPos.CENTER);

root.getChildren().add(gridpane);

primaryStage.setScene(scene);

primaryStage.show();

}

}

它是用于在两个列表视图之间来回移动的代码,一次一个.我想要做的是一键选择和移动几个人.

我想改变的相关摘录是:

final ListView candidatesListView = new ListView(candidates);

candidatesListView.setPrefWidth(150);

candidatesListView.setPrefHeight(150);

gridpane.add(candidatesListView, 0, 1);

// heros

final ObservableList heroes = FXCollections.observableArrayList();

final ListView heroListView = new ListView(heroes);

// select heroes

Button sendRightButton = new Button(">");

sendRightButton.setOnAction(new EventHandler() {

public void handle(ActionEvent event) {

String potential = candidatesListView.getSelectionModel().getSelectedItem();

if (potential != null) {

candidatesListView.getSelectionModel().clearSelection();

candidates.remove(potential);

heroes.add(potential);

}

}

});

// deselect heroes

Button sendLeftButton = new Button("

sendLeftButton.setOnAction(new EventHandler() {

public void handle(ActionEvent event) {

String notHero = heroListView.getSelectionModel().getSelectedItem();

if (notHero != null) {

heroListView.getSelectionModel().clearSelection();

heroes.remove(notHero);

candidates.add(notHero);

}

}

});

我尝试过改变:

首先,我添加以下导入:

import javafx.scene.control.SelectionMode;

然后我添加线条

candidatesListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

heroListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

在两个清单的相应声明之下.

最后,我将事件按钮的处理代码更改为

public void handle(ActionEvent event) {

ObservableList potential = candidatesListView.getSelectionModel().getSelectedItems();

if (potential != null) {

System.out.println(potential);

candidates.removeAll(potential);

heroes.addAll(potential);

candidatesListView.getSelectionModel().clearSelection();

}

}

那就是 – 我将它改为getSelectedItem_s_,然后我addAll和removeAll而不是仅添加/删除一个人.当我尝试移动几个人时,这只会将listView留空.是什么赋予了?

PS.我还尝试通过迭代“潜在”列表一次一个地添加/删除几个人,但这也给出了错误的结果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值