Hallo zusammen,
ich versuche gerade eine Listview zu erzeugen, in der ich alle Usernamen sehe und über ein Icon erkenne, welcher User online/offline ist.
Die Usernamen hole ich mir über eine Schleife aus einer Hashmap und schreibe sie in ein ListView. Mit dem zugehörigen Key zum Namen, frage ich in einer extra Klasse ab, ob der User online oder offline ist. Das klappt auch so weit. Dann will ich mit der Info UserStatus = 0/1 in die LEDStatus()-Methode rein gehen und dort das Bild setzen (0=rot, 1= grün).
Das Problem ist die updateItem()-Methode. Die wird nur beim letzten Durchlauf ausgeführt und setzt dann alle Bilder auf den Wert, den der letzte User hat.
Ich hätte aber gern, dass das Bild immer zusammen mit dem aktuellen User gesetzt wird.
Bin aber gerade etwas überfragt, wie ich das machen soll.
Mein FXML-Controller Quellcode sieht so aus:
Und die Klasse für die Statusanzeige:
ich versuche gerade eine Listview zu erzeugen, in der ich alle Usernamen sehe und über ein Icon erkenne, welcher User online/offline ist.
Die Usernamen hole ich mir über eine Schleife aus einer Hashmap und schreibe sie in ein ListView. Mit dem zugehörigen Key zum Namen, frage ich in einer extra Klasse ab, ob der User online oder offline ist. Das klappt auch so weit. Dann will ich mit der Info UserStatus = 0/1 in die LEDStatus()-Methode rein gehen und dort das Bild setzen (0=rot, 1= grün).
Das Problem ist die updateItem()-Methode. Die wird nur beim letzten Durchlauf ausgeführt und setzt dann alle Bilder auf den Wert, den der letzte User hat.
Ich hätte aber gern, dass das Bild immer zusammen mit dem aktuellen User gesetzt wird.
Bin aber gerade etwas überfragt, wie ich das machen soll.
Mein FXML-Controller Quellcode sieht so aus:
Java:
@FXML
private ListView<String> list;
private final Image RedLED = new Image("/images/LEDRed.png");
private final Image GreenLED = new Image("/images/LEDGreen.png");
private Image[] listOfImages = {RedLED, GreenLED};
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
UserData UserName = new UserData();
HashMap<Integer, String> Map = UserName.getUsers();
List<String> UserDisplay = new ArrayList<String>();
for (Integer key : Map.keySet()) {
String User = Map.get(key);
int UserStatus = UserName.getUserStatus(key);
System.out.println("Current User Key is: " + key + " Current User Name is: " + User + " Current User Status is: " + UserStatus);
UserDisplay.add(User);
ObservableList<String> data = FXCollections.observableArrayList(UserDisplay);
LEDStatus(UserStatus);
list.setItems((ObservableList<String>) data);
}
}
Und die Klasse für die Statusanzeige:
Java:
public void LEDStatus(Integer UserStatus){
System.out.print( "User Status is: " + UserStatus);
System.out.println();
list.setCellFactory(listView -> new ListCell<String>() {
private ImageView imageView = new ImageView();
@Override
public void updateItem(String list, boolean empty) {
super.updateItem(list, empty);
imageView.setFitHeight(50);
imageView.setFitWidth(50);
System.out.print("UserStatus: " + UserStatus);
System.out.println();
if (empty) {
setText(null);
setGraphic(null);
} else {
if (UserStatus == 1){
imageView.setImage(listOfImages[0]);
setText(list);
setGraphic(imageView);}
else {
imageView.setImage(listOfImages[1]);
setText(list);
setGraphic(imageView);}
}
}
});
}