--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/unixwork/im/ContactListFrame.java Wed Dec 25 21:49:48 2024 +0100 @@ -0,0 +1,73 @@ +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; + +// 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) { + setText(((RosterEntry) value).toString()); + } + 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); + } + } + + // 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; + } +}