2017-06-10 1 views
0

Im nouveau à Java et essayer d'obtenir ma tête autour des différentes fonctions, mon mal de tête en cours est MouseListenersMouseListeners et Tabbed Détection ligne

J'ai un JTabbedPane avec trois onglets tenant chacun (JScrollPane plus un JTable) j'ai besoin maintenant pour détecter quelle ligne de l'onglet est cliqué et Im frapper des problèmes. Dois-je placer un seul écouteur sur le premier volet et détecter quel onglet a été sélectionné? ou est-ce que j'en mets un sur chaque JTable?

J'ai essayé le code suivant, mais pour une raison quelconque quand je le lance, il fait erreur

standardTable.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
    JTabbedPane aPane = (JTabbedPane)e.getComponent(); 
    if(e.getClickCount()==2) { 
     detectMouseClickRow(aPane, e); 
    } // do this if double click 
    if(e.getClickCount()==1) { 
     detectSingleClick(aPane, e); 
    } // Do this if its a single click 
    } 
}); 

Quand je lance ce qui précède Netbeans me signale un problème, mais ne marche pas la liste où, donc je l'ignorer et il des erreurs à detectMouseClickRow (aPane, e); ou son seul clic variante

ClassCastException: javax.swing.JTable ne peut pas être jeté à javax.swing.JTabbedPane

je pouvais faire avec des pointeurs parce que je suis prolly se tromper ici et ce n'est pas meilleure méthode à utiliser?

+0

Le message est explicite. Alors, où dans votre code essayez-vous de lancer un Objet sur un JTabbedPane. L'erreur vous indique que l'objet est une JTable, donc vous devriez convertir l'objet en JTable. Cela est logique puisque vous ajoutez l'écouteur à JTable, pas à JTabbedPane, donc je ne sais pas pourquoi vous pensez que l'objet serait un JTabbedPane. – camickr

Répondre

0

Vous ajoutez un MouseListener sur la standardTable que je suppose est un JTable, maintenant lors de la récupération des composants de MouseEvent e par e.getComponent(), vous obtiendrez un JTable. Donc le casting JTabbedPane aPane = (JTabbedPane)e.getComponent(); n'est pas correct. En fait, il devrait être JTable aPane = (JTable)e.getComponent();

Maintenant, vous pouvez obtenir le JTabbedPane de JTable en utilisant getParent() selon la façon dont vous avez ajouté JTable dans le volet à onglets.

+0

'Je n'ai pas vu cette partie de la question' - vous n'avez pas besoin de le voir. Pensez-y une minute. Vous avez suggéré d'ajouter MouseListener au volet à onglets. Bien, alors l'utilisateur clique sur un onglet, alors que se passe-t-il? L'utilisateur n'a pas eu de modification pour même sélectionner une ligne dans la table, alors comment pouvez-vous obtenir la ligne actuellement sélectionnée? – camickr

0

Merci à tous Ive expira lentement triée, Oui il y avait une erreur sur la coulée dans JTabbedPane comme il était un JTable j'aurais supprimé la question, mais je ne peux pas trouver un moyen de le faire ,.

Désolé.

+0

Ce n'est pas une réponse. Supprimez la réponse en cliquant sur le bouton Supprimer. Si vous avez d'autres commentaires à faire, éditez la question avec le commentaire. Conservez toutes les informations au même endroit. Il y a aussi un bouton de suppression pour la question. Il devrait être juste sous les balises "java ActionListener" que vous avez spécifié pour la question. – camickr