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

Thu, 26 Dec 2024 12:53:02 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 26 Dec 2024 12:53:02 +0100
changeset 2
94c6a715fa44
parent 0
f3095cda599e
child 3
25a32e2dfde5
permissions
-rw-r--r--

handle presence messages

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

    // 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