Я новичок в этом материале java/javafx, и я был бы очень доволен, если бы кто-нибудь мог мне помочь.JavaFX - переместить элемент ListView - MVC
У меня есть следующий код:
// Main.java
package lernen;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application
{
@Override
public void start(Stage primaryStage)
{
Presenter p = new Presenter();
View v = new View(p);
Model m = new Model();
p.setModel(m);
p.setView(v);
Scene scene = new Scene(v.getUI());
primaryStage.setTitle("Schiebefenster");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
// View.java
package lernen;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.layout.GridPane;
public class View
{
private Presenter presenter;
private GridPane pane;
private Button b1, b2;
private Label l1, l2;
// private ObservableList<String> candidates = FXCollections.observableArrayList("a", "b", "c", "d");
private ObservableList<String> candidates = FXCollections.observableArrayList();
private ListView<String> list = new ListView<>(candidates);
private ObservableList<String> selected = FXCollections.observableArrayList();
private ListView<String> list2 = new ListView<>(selected);
public View(Presenter presenter)
{
this.presenter = presenter;
initView();
}
private void initView()
{
pane = new GridPane();
pane.setVisible(true);
l1 = new Label("Buchstabe");
pane.add(l1, 0, 0);
l2 = new Label("Selektiert");
pane.add(l2, 4, 0);
b1 = new Button("<");
pane.add(b1, 2, 2);
b2 = new Button(">");
pane.add(b2, 2, 3);
// list = new ListView<String>();
pane.add(list, 0, 1, 2, 5);
// list2 = new ListView<>();
pane.add(list2, 4, 1, 2, 5);
b2.setOnAction((ActionEvent) -> {
String potential = list.getSelectionModel().getSelectedItem();
if (potential != null)
{
list.getSelectionModel().clearSelection();
candidates.remove(potential);
selected.add(potential);
}
});
b1.setOnAction((ActionEvent) -> {
String selectedItem = list2.getSelectionModel().getSelectedItem();
if (selectedItem != null)
{
list2.getSelectionModel().clearSelection();
selected.remove(selectedItem);
candidates.add(selectedItem);
}
});
}
public GridPane getUI()
{
return pane;
}
public ListView<String> getList()
{
return list;
}
public ListView<String> getList2()
{
return list2;
}
}
// Presenter.java
package lernen;
public class Presenter
{
private View view;
private Model model;
public Presenter()
{
}
public void setView(View view)
{
this.view = view;
this.view.getList().setItems(model.getData());
}
public void setModel(Model model)
{
this.model = model;
}
}
// Model.java
package lernen;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class Model
{
private ObservableList<String> data = FXCollections.observableArrayList();
public Model()
{
data.addAll("a", "b", "c", "d", "e");
}
public ObservableList<String> getData()
{
return data;
}
}
Задача состоит в перемещении элемента из левого списка вправо и наоборот в соответствии с шаблоном MVP. Проблема в том, что если я переместил одну букву в правую сторону, буква на левой стороне все еще там. Надеюсь, вы, ребята, можете мне помочь. Спасибо заранее!
Большое спасибо за вашу помощь. Я решил проблему, используя другой подход пару минут назад. но решение youre работает! *пальцы вверх* – manCRO