Wed, 25 Dec 2024 21:49:48 +0100
add initial code with minimal working 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; // 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; } }