src/main/java/de/unixwork/im/ContactListFrame.java

changeset 0
f3095cda599e
child 2
94c6a715fa44
--- /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;
+    }
+}

mercurial