Thu, 26 Dec 2024 17:19:15 +0100
update status in contact list and conversations
package de.unixwork.im; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; import org.jivesoftware.smack.roster.RosterEntry; import org.jxmpp.jid.Jid; // Main class for the XMPP contact list window public class ContactListFrame extends JFrame { private DefaultListModel<RosterEntry> contactListModel; private JList<RosterEntry> contactList; private ContactClickListener contactClickListener; public ContactListFrame() { setTitle("Contact List"); setSize(200, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // Create the list model and list view contactListModel = new DefaultListModel<>(); contactList = new JList<>(contactListModel); contactList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); contactList.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof RosterEntry) { RosterEntry entry = (RosterEntry)value; String xid = entry.getJid().asBareJid().toString(); setText(App.getInstance().getStatusForXID(xid) + xid); } return c; } }); // Add mouse listener for click events contactList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { // Double-click detected int index = contactList.locationToIndex(e.getPoint()); if (index >= 0 && contactClickListener != null) { contactClickListener.onContactClicked(contactListModel.getElementAt(index)); } } } }); // Add the list to a scroll pane JScrollPane scrollPane = new JScrollPane(contactList); add(scrollPane, BorderLayout.CENTER); } // Method to set the contact list data public void setContacts(List<RosterEntry> contacts) { contactListModel.clear(); for (RosterEntry contact : contacts) { contactListModel.addElement(contact); } } public void reload() { contactList.updateUI(); } // Interface for click callback public interface ContactClickListener { void onContactClicked(RosterEntry contact); } // Method to set the click listener public void setContactClickListener(ContactClickListener listener) { this.contactClickListener = listener; } }