Je suis un nouvel utilisateur de Java swing. Je dois être en mesure de créer un popup avec des informations sur les lignes lorsque l'utilisateur clique sur cette ligne. J'ai réussi à incorporer la réaction de l'événement mouseClick dans mon cours de table, et j'ai les informations de ligne disponibles. Comment puis-je informer la fenêtre principale de l'événement afin qu'il puisse afficher la boîte de dialogue/boîte popup?Comment faire pour que la fenêtre principale réagisse à une table, cliquez sur
Répondre
Il suffit d'appeler une méthode sur la fenêtre principale pour effectuer l'action
Il y a plusieurs façons de gérer cela:
1) Vous pouvez avoir la classe de table personnalisé ont un écouteur personnalisé sur elle (Pattern Observer) qu'il appelle ensuite à chaque fois que le clic se produit
2) Vous pouvez avoir la table appeler une méthode sur la fenêtre principale - à savoir passer dans la fenêtre principale dans le cadre de la construction de la table
3) Vous pouvez avoir la fenêtre principale vous inscrire en tant qu'auditeur à la table (c.-à-d. un écouteur de la souris) et le faire gérer les événements à la place.
Il y en a d'autres, j'en suis sûr. Ce sont ceux que j'ai vu le plus souvent utilisés. Selon la taille, la portée et l'intention du logiciel en cours d'écriture, chacun a ses mérites et ses inconvénients. Est-ce un projet pour l'école, un jouet est écrit pour en savoir plus sur Swing, ou est-il conçu pour être un projet à plus long terme? Si c'est le cas, je recommanderais de consulter les discussions sur l'architecture de MVC (Model View Controller), car, à mon avis, cela peut rendre la maintenance du code beaucoup plus facile à long terme.
Bonne chance.
Merci beaucoup pour vos conseils. J'ai utilisé la deuxième idée, bien que je ne puisse pas envoyer la fenêtre dans le constructeur de la table (elle ne le permet pas dans les fonctions statiques telles que main). J'ai envoyé à la place la classe qui gère toutes les données téléchargeant et éditant qui est un membre de ma fenêtre principale. Et cela fonctionne ... – Ayelet
@Ayelet: juste un point de note: il est considéré comme une bonne étiquette sur le site pour sélectionner comme réponse si quelqu'un a répondu à votre question. Content que je puisse aider avec ton problème. – aperkins
Vous pouvez le faire comme ceci:
myTable.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if(SwingUtilities.isRightMouseButton(e)) {
int index = myTable.rowAtPoint(e.getPoint());
JPopupMenu popup = new JPopupMenu();
popup.add(myMenuAction);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
Et puis mettre en œuvre une action myMenuAction
où vous utilisez le index
de votre table.
Salut Ayelet. Il est très difficile d'aider si vous ne publiez pas le code en question. Pouvez-vous éditer votre question et ajouter le code avec lequel vous rencontrez des problèmes? – Oded
J'ai modifié votre code dans votre post précédent; cela pourrait vous aider à poster facilement. – trashgod