Icons neben Text in Listview setzen

Felix123

Mitglied
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:

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);}
  }
  }
  });
   
  }
 

Hutzli

Aktives Mitglied
Hey Felix,

Dein Code sieht doch sehr speziell aus, vor allem die Tatsache, dass du jedesmal die CellFactory neu setzt.

Versuchs mal so:

Java:
public class Main extends Application
{
      private ListView<UserData> mUserData;
 
      public static void main( String[] args )
      {
            launch(args);
      }

      @Override
      public void start(Stage stage)
      {
            mListView = new ListView<UserData>();
            mListView.setCellFactory( newCallback<ListView<UserData>,ListCell<UserData>>()
            {
                  @Override
                  public UserDataCell<UserData> call(ListView<UserData> listView)
                  {
                       return UserDataCell();
                  }
            });

            mListView.setItems(FxCollections.observableArrayList( UserData.getItemsAsList() );
            Scene lScene = new Scene( mListView );
            stage.setScene( lScene );
            stage.show();
  }

      private class UserDataCell
      {
            private HBox mContent;

            @Override
            public void updateItem(UserData pItem, boolean pIsEmpty)
            {
                  if( !pIsEmpty && pItem != null )
                  {
                        if( mContent == null )
                        {
                              createItem( pItem );
                        }
                        updateItem( pItem );
                  }
                  else
                  {
                        deleteItem( pItem );
                  }
            }

            private void createItem( pItem )
            {
                  mContent = new HBox();
                  setGraphic( mContent );
            }

            private void updateContent( pItem )
            {
                  mContent.getChildren().add( new Label( pItem.getName() ) );
                  Image lImage = new Image( UserData.getImagePath( pItem ) );
                  mContent.getChildren().add( new ImageView( lImage ) );
            }

            private void deleteItem( pItem )
            {
                  mContent.getChildren().clear();
                  setGraphic( null );
                  mContent = null;
            }
      }
}

public class UserData
{
      private static List<UserData> smUserData = new ArrayList<UserData>();
      private static String GREEN_IMAGE_PATH = "/images/your/path/green.png";
      private static String RED_IMAGE_PATH = "/images/your/path/red.png";

      public UserData()
      {
            smUserData.add(this);
      }
      private String mName;
      private boolean mIsOnline;

      //Getter Setter

      public static List<UserData> getItemsAsList()
      {
            return smUserData;
      }

      public static String getImagePath( UserData pData )
      {
            if( pData.isOnline() )
            {
                  return GREEN_IMAGE_PATH;
            }
            return RED_IMAGE_PATH;
      }
}

Der eine oder andere Flüchtigkeitsfehler hat sich eventuell eingeschlichen, da ich den Code nicht getestet habe, ich werde den Thread weiterhin verfolgen und dir weiterhelfen, falls es dazu noch Fragen gibt.
Vom Code Design her ist dies ebenfalls nicht die beste Lösung. Die UserData Klasse sollte lediglich als Datencontainer fungieren, übernimmt aber noch unschöne andere Funktionen. Der nächste Schritt wäre also das Design zu verbessern, wenn du es zum Laufen gekriegt hast. MVC ist hier das Stichwort!

Freundliche Grüsse

Hutzli
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
thor_norsk Icons laden nicht in GUI AWT, Swing, JavaFX & SWT 15
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
JavaInBrain Swing JButton: Zuordnen von Icons AWT, Swing, JavaFX & SWT 4
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
NR_EIGHT Swing JButton zeigt Icons nicht an AWT, Swing, JavaFX & SWT 3
B "Alte" Swing ICONs gesucht AWT, Swing, JavaFX & SWT 2
X Icons in einer Spalte darstellen AWT, Swing, JavaFX & SWT 6
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
B Standard Icons wo findet man diese? AWT, Swing, JavaFX & SWT 20
N Button soll die Größ eines Icons haben AWT, Swing, JavaFX & SWT 5
G Swing Icons von JLabel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
sylo Position des Icons bei JMenuItem AWT, Swing, JavaFX & SWT 11
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
T Swing Icons mit Transparentz... AWT, Swing, JavaFX & SWT 12
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
L Wieso werden die Icons nicht dargestellt? AWT, Swing, JavaFX & SWT 2
M Icons in Jar AWT, Swing, JavaFX & SWT 3
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
T Icons in jar AWT, Swing, JavaFX & SWT 17
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
G Icons verkleinern AWT, Swing, JavaFX & SWT 4
M icons für die java.swing components wie jbutton etc AWT, Swing, JavaFX & SWT 5
G Verhindern, das AbstractAction Text und Icons überschreibt? AWT, Swing, JavaFX & SWT 3
DeeDee0815 SWT-Buttons, Icons und die Win32-API AWT, Swing, JavaFX & SWT 3
T Standard Icons AWT, Swing, JavaFX & SWT 7
G Wo finde ich Icons zum runterladen AWT, Swing, JavaFX & SWT 3
S JTable mit Icons in DB speichern AWT, Swing, JavaFX & SWT 10
S Hochauflösende ICONS für Lebensmittel? AWT, Swing, JavaFX & SWT 7
J Icons ueber getRessource lesen AWT, Swing, JavaFX & SWT 5
S JButton auf verkleiner auf größe eines Icons AWT, Swing, JavaFX & SWT 5
A Icons von Kontextmenüeinträgen verschwinden (SWT) AWT, Swing, JavaFX & SWT 2
D Komponenten mit zusätzlichen Icons AWT, Swing, JavaFX & SWT 2
F 2 icons in jtabbedpane, links und rechts von label AWT, Swing, JavaFX & SWT 2
P JMenu / JMenuItem durch Rekursion Icons entfernen AWT, Swing, JavaFX & SWT 4
B PNG-Icons in Toolbar einbinden AWT, Swing, JavaFX & SWT 3
C Icons und Bilder in der JAR AWT, Swing, JavaFX & SWT 9
S Multiselektieren von Icons AWT, Swing, JavaFX & SWT 5
R JTree ohne visible Root aber mit Icons ? AWT, Swing, JavaFX & SWT 2
F Icons des JTrees austauschen AWT, Swing, JavaFX & SWT 2
G JTabel und Icons AWT, Swing, JavaFX & SWT 9
Q CloseAndMaxTabbedPane Icons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Java Datei Icons AWT, Swing, JavaFX & SWT 2
M Windows file icons in Java verwenden AWT, Swing, JavaFX & SWT 2
S JAR -> Icons werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 11
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
Z Problem mit Icons in JTable AWT, Swing, JavaFX & SWT 3
R SWT: Icons im Table vor den Einträgen AWT, Swing, JavaFX & SWT 3
D Auf System-Icons wie die aus JOptionPane zugreifen? AWT, Swing, JavaFX & SWT 6
Hotkey Freie Icons für Anwendung mit Java Look&Feel AWT, Swing, JavaFX & SWT 4
S JTree // Icons AWT, Swing, JavaFX & SWT 2
S [JTree] Icons ohne DefaultTreeCellRenderer AWT, Swing, JavaFX & SWT 6
J Icons mit Text als Menü AWT, Swing, JavaFX & SWT 2
F SkinLF - GTK Icons werden nicht genutz - KDE schon - why? AWT, Swing, JavaFX & SWT 8
F JTree mit anderen Icons AWT, Swing, JavaFX & SWT 7
W Websites mit freien Icons AWT, Swing, JavaFX & SWT 4
G Warum gehen meine Icons/Images nicht weg? AWT, Swing, JavaFX & SWT 2
I Icons in JLists AWT, Swing, JavaFX & SWT 2
G Icons in CTabFolder AWT, Swing, JavaFX & SWT 3
L Buttons und Icons AWT, Swing, JavaFX & SWT 2
W JRadioButtonMenuItem (Icons) AWT, Swing, JavaFX & SWT 13
Z Problemen mit Icons? AWT, Swing, JavaFX & SWT 5
G Overlay-Icons über JTextField AWT, Swing, JavaFX & SWT 5
A Icons und Bilder bei EXE-Datei nicht da AWT, Swing, JavaFX & SWT 5
S JTree Datei Icons ? AWT, Swing, JavaFX & SWT 28
M icons im menubar ? AWT, Swing, JavaFX & SWT 5
G standard system icons AWT, Swing, JavaFX & SWT 1
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
H Swing JTabbedPane: Zusätzliche Buttons neben den Tabs AWT, Swing, JavaFX & SWT 7
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
H Node neben dem Expand/Collapse Symbol ermitteln AWT, Swing, JavaFX & SWT 4
S JTree Expand(-) und Collapse(+) neben Icon AWT, Swing, JavaFX & SWT 3
O icon neben der Uhr unten AWT, Swing, JavaFX & SWT 8
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C JToggleButton disabled Text Color AWT, Swing, JavaFX & SWT 11
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
FrittenFritze Text in Flying Saucer selectierbar machen AWT, Swing, JavaFX & SWT 0
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
I Rich Text drucken AWT, Swing, JavaFX & SWT 0
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
N In Textdatei Text anfügen per GUI AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben