Vous cherchez comment traverser un JTree (pouvez le faire) et vérifier pour voir chaque nœud pour voir si elle est affichée (à l'utilisateur) ou non visible. Je ne peux pas croire que JTree n'a pas cette fonction, peut-être qu'il me manque quelque chose?Java JTree - Comment vérifier si le noeud est affiché?
Répondre
Vous devez considérer deux choses différentes:
Un nœud peut devenir caché en fermant l'un de ses parents. Même si le parent est visible à l'écran, l'enfant ne l'est pas. Utilisez JTree.isVisible() pour cela.
Si le noeud est développé, il peut être masqué car il est sorti du fichier viewport. Ceci n'est pas géré dans le JTree mais dans le JScrollPane qui enveloppe l'arbre. Pour savoir si un noeud se trouve dans la zone visible de la fenêtre.
Pour savoir si # 2 est vrai, vous devez obtenir le rectangle où le nœud utilise JTree.getPathBounds(). Ensuite, vous devez l'intersection avec ce rectangle avec la fenêtre (utilisez scrollPane.getViewport().getViewRect()
. Si nodeRect.intersects (viewRect)
retours true
, le nœud est visible.
En fonction de votre application, il peut être plus efficace de regarder juste pour les noeuds visibles, plutôt que itérer . tous les nœuds du TreeModel
et déterminer si chacun est visible Une fonction d'échantillonnage pour effectuer c'est indiqué ci-dessous:
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class JTreeTools {
public static List<TreeNode> getVisibleNodes(JScrollPane hostingScrollPane, JTree hostingJTree){
//Find the first and last visible row within the scroll pane.
final Rectangle visibleRectangle = hostingScrollPane.getViewport().getViewRect();
final int firstRow = hostingJTree.getClosestRowForLocation(visibleRectangle.x, visibleRectangle.y);
final int lastRow = hostingJTree.getClosestRowForLocation(visibleRectangle.x, visibleRectangle.y + visibleRectangle.height);
//Iterate through each visible row, identify the object at this row, and add it to a result list.
List<TreeNode> resultList = new ArrayList<TreeNode>();
for (int currentRow = firstRow; currentRow<=lastRow; currentRow++){
TreePath currentPath = hostingJTree.getPathForRow(currentRow);
Object lastPathObject = currentPath.getLastPathComponent();
if (lastPathObject instanceof TreeNode){
resultList.add((TreeNode)lastPathObject);
}
}
return(resultList);
}
}
- 1. Comment vérifier si un menu est affiché
- 2. Comment vérifier si un QWidget est déjà affiché?
- 3. Java: Vérifier si le PC est inactif
- 4. Java: Comment vérifier si l'objet est nul?
- 5. XML comment vérifier si le noeud renvoie null?
- 6. Comment puis-je vérifier si un noeud est un enfant d'un autre noeud?
- 7. Java comment afficher le modèle de fichier JTree si l'application est format de fichier jar
- 8. Détecter si Tooltip est affiché?
- 9. Vérifier si le contrôle est à l'écran
- 10. Java vérifier si BufferedImage est un GIF
- 11. Java Swing JTree Expansion
- 12. Java dynamique JTree
- 13. déterminer si uiview est affiché
- 14. comment vérifier si le plist est vide
- 15. comment vérifier si le fichier est php?
- 16. Comment vérifier si le document est prêt?
- 17. Comment vérifier si le fichier est binaire?
- 18. Comment vérifier si le format est correct
- 19. Comment vérifier si le formulaire est maximisé?
- 20. Vérifier si le fichier est signé
- 21. Comment vérifier si la méthode select SqlDataSource1 renvoie 0 noeud?
- 22. Comment vérifier si le noeud racine treeview a des noeuds enfants ou non
- 23. Comment vérifier si un Socket est actuellement connecté en Java?
- 24. Comment vérifier si un caractère Java est un symbole monétaire
- 25. JTree vérifier les catégories en double
- 26. Comment vérifier si aujourd'hui est dimanche avec Java Calendar
- 27. Comment vérifier si un widget particulier est affiché ou non dans la barre latérale?
- 28. Comment puis-je savoir si un ModalViewController est affiché?
- 29. umbraco navigation, noeud affiché deux fois
- 30. Sélection du noeud de l'arbre Java
dammmnn Je savais qu'il fallait faire avec la fenêtre Merci.! – Hezeus