我想知道如何从存储在ArrayList中的对象到TextArea中获取各种属性? 我有一个ListView,根据您按的ListView中的哪几行,不同的文本应出现在TextArea中。我就是无法正常工作。
到目前为止,这是我的一些代码。动物是另一类。
ListView<String> cats = new ListView<>();
cats.setPrefSize(90, 200);
cats.getItems().addAll(
"First cat",
"Second cat"
);
final ArrayList<Animals> catsdesricption = new ArrayList<Animals>();
Animals FirstCat = new Animals("First cat", "cats", "is small and fluffy");
catsdesricption.add(FirstCat);
TextArea description = new TextArea();
description.setMaxSize(300, 200);
description.setWrapText(true);
VBox vbox = new VBox();
Label heading = new Label("Cats");
heading.setFont(new Font("Times new Roman", 20));
HBox layout = new HBox();
layout.getChildren().addAll(cats, catsdesricption);
vbox.getChildren().addAll(heading, layout);
Scene scene = new Scene(vbox, 420, 250);
primaryStage.setScene(scene);
primaryStage.show();
答案 0 :(得分:0)
仔细查看您的代码后,我注意到了很多问题。回答您的原始问题。您需要SelectionModel's
ItemProperty
上的侦听器来更新TextArea
。
cats.getSelectionModel().selectedItemProperty().addListener((obs, oldAnimal, newAnimal) -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Name: ").append(newAnimal.getName()).append(System.lineSeparator());
stringBuilder.append("Type: ").append(newAnimal.getType()).append(System.lineSeparator());
stringBuilder.append("About: ").append(newAnimal.getAbout()).append(System.lineSeparator());
description.setText(stringBuilder.toString());
});
第一个问题:
ListView<String> cats = new ListView<>();
cats.setPrefSize(90, 200);
cats.getItems().addAll(
"First cat",
"Second cat"
);
似乎您希望ListView
容纳Animal
个对象,但是您正在使用String
个对象。
修复
ListView<Animal> cats = new ListView<>();
cats.getItems().add(new Animal("First cat", "cats", "is small and fluffy"));
cats.getItems().add(new Animal("Second cat", "cats", "is big and fluffy"));
第二个问题:
现在ListView
正在处理Animal
对象,我们需要使用ListView's
CellFActory
来告诉ListView
要显示什么文本。在这种情况下,将显示名称。
cats.setCellFactory((ListView<Animal> param) -> {
ListCell<Animal> cell = new ListCell<Animal>() {
@Override
protected void updateItem(Animal item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getName());
} else {
setText("");
}
}
};
return cell;
});
现在这两件事已经完成,可以添加原始问题代码。上面的代码根据TextArea's
中选择的项目来更改ListView
文本。
完整代码:
主要
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
/**
* JavaFX App
*/
public class App extends Application {
@Override
public void start(Stage primaryStage) {
ListView<Animal> cats = new ListView<>();
cats.getItems().add(new Animal("First cat", "cats", "is small and fluffy"));
cats.getItems().add(new Animal("Second cat", "cats", "is big and fluffy"));
cats.setCellFactory((ListView<Animal> param) -> {
ListCell<Animal> cell = new ListCell<Animal>() {
@Override
protected void updateItem(Animal item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getName());
} else {
setText("");
}
}
};
return cell;
});
cats.setPrefSize(90, 200);
TextArea description = new TextArea();
description.setMaxSize(300, 200);
description.setWrapText(true);
cats.getSelectionModel().selectedItemProperty().addListener((obs, oldAnimal, newAnimal) -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Name: ").append(newAnimal.getName()).append(System.lineSeparator());
stringBuilder.append("Type: ").append(newAnimal.getType()).append(System.lineSeparator());
stringBuilder.append("About: ").append(newAnimal.getAbout()).append(System.lineSeparator());
description.setText(stringBuilder.toString());
});
VBox vbox = new VBox();
Label heading = new Label("Cats");
heading.setFont(new Font("Times new Roman", 20));
HBox layout = new HBox(cats, description);
vbox.getChildren().addAll(heading, layout);
Scene scene = new Scene(vbox, 420, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch();
}
}
我的动物课:(您没有发布您的动物课)
/**
*
* @author blj0011
*/
class Animal {
private String name;
private String type;
private String about;
public Animal(String name, String type, String about) {
this.name = name;
this.type = type;
this.about = about;
}
public String getAbout() {
return about;
}
public void setAbout(String about) {
this.about = about;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Animals{name=").append(name);
sb.append(", type=").append(type);
sb.append(", about=").append(about);
sb.append('}');
return sb.toString();
}
}