J'ai une jtable à l'intérieur d'un scrollpane. Comment puis-je empêcher le scrollpane de défiler vers le haut ou vers le bas lorsqu'une cellule partiellement hors de vue est mise au point? Le problème est que je mets les cellules à éditables quand l'utilisateur les survole, alors quand vous passez la souris sur une cellule qui est partiellement hors de vue, la vue change soudainement. Je n'aime pas ce comportement. des idées sur la façon de le changer?Désactiver le défilement vers la cellule en cours
Répondre
Vous pouvez essayer d'appeler "setAutoscrolls (false)" sur votre table.
Bien que le javadoc parle de la gestion des événements de déplacement de la souris, il doit également désactiver le défilement des sections ligne/cellule.
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TableTest extends JFrame {
private JTable table;
/**
* Create a new TableTest Frame.
* @param title The title of the frame.
*/
public TableTest() {
Object[][] tableData = new Object[][] {
{1, "One"}, {2, "Two"}, {3, "Three"},
{4, "Four"}, {5, "Five"}, {6, "Six"}};
DefaultTableModel tableModel = new DefaultTableModel(tableData, new String[] {"A", "B"});
table = new JTable(tableModel);
table.setAutoscrolls(false);
JScrollPane scrolly = new JScrollPane(table);
setLayout(new BorderLayout());
add(scrolly, BorderLayout.CENTER);
}
/**
* @param args
*/
public static void main(String[] args) {
TableTest frame = new TableTest();
frame.pack();
frame.setSize(200, 100);
frame.setVisible(true);
}
}
J'ai essayé la méthode suggérée à la fois sur le scrollpane et sur le jtable et je n'ai pas changé le comportement que j'ai décrit. – Victor
Étrange. À moins d'avoir mal compris ce que vous essayez de faire, cela a vraiment fonctionné pour moi. J'ai posté l'exemple de code que j'ai utilisé pour le tester. Vous devriez obtenir un comportement différent lorsque l'appel setAutoscrolls (false) est supprimé/ajouté. – Aaron
lié au démarrage d'une modification par programmation (fi à une cellule en dehors de la plage visible) le comportement est affecté par la propriété autoscrolls: l'éditeur est _never_ défilant dans le rect visible :-) On dirait que @Viktor a fait quelque chose dans son code init personnalisé explicitement changé la sélection? Difficile à dire après toutes ces années ... – kleopatra
Il m'a fallu des heures de recherche, mais je l'ai eu pour travailler pour moi.
Remplacer cette méthode avec votre sous-classe JTable
public void scrollRectToVisible(java.awt.Rectangle aRect)
{
if(getAutoscrolls())
super.scrollRectToVisible(aRect);
}
Maintenant table.setAutoscrolls(false)
devrait fonctionner correctement.
cela viole (au moins dur à la limite de) le contrat de scrollRectToVisible: c'est _le_ moyen de faire défiler une partie arbitraire d'un composant dans le rect visible, donc doit être disponible sans condition. – kleopatra
- 1. Désactiver la réflexion Java pour le thread en cours
- 2. désactiver la barre de défilement sur le div
- 3. Puis-je désactiver le son de défilement UIPickerView?
- 4. Désactiver la mise à jour de l'image webcam en cours
- 5. WPF défilement Listbox vers le bas
- 6. UITextView défilement automatique vers le bas
- 7. Avec WPF, le défilement vers le bas d'un ListView est rapide, le défilement vers le haut est lent
- 8. Rendu UserControl: écrire un lien vers la page en cours?
- 9. Pouvez-vous désactiver le défilement horizontal automatique dans Eclipse?
- 10. Désactiver la barre de défilement dans MDI Parent
- 11. Activer/Désactiver le commutateur dans la cellule (bug 2.2.1 à 3.0)
- 12. Comment désactiver l'onglet d'extension de formulaire en cours d'exécution?
- 13. Comment faire pour déplacer la barre de défilement vers le haut d'une ligne? (En C# RichTextBox)
- 14. Comment rediriger vers la page en cours dans le filtre de servlet?
- 15. Chemin vers le fichier en cours dépend de la façon dont je l'exécution du programme
- 16. Comment désactiver la surbrillance de la ligne en cours dans NetBeans?
- 17. Comment obtenir le fichier en cours, la classe en cours et la méthode actuelle avec Python?
- 18. Comment désactiver le contour interne sur la cellule de tableau sélectionnée dans Firefox
- 19. Cellule de défilement dans une hauteur de 100% TABLE
- 20. Conserver la page Web du défilement vers le haut sur le formulaire. Soumettre
- 21. QGraphicsView - comment désactiver le défilement de la souris et du clavier
- 22. Désactiver CTRL + Flèche vers le haut = Accueil sur DataGridView
- 23. Comment désactiver une cellule de bouton dans un DataGrid WinForms?
- 24. déplacer le div en fonction de la barre de défilement de la fenêtre
- 25. Défilement lisse vers le haut de la page après un ajax ajback postback
- 26. Activer/désactiver la prise en charge du débogueur pour la JVM en cours à partir du code Java
- 27. Copier la couleur d'intérieur de cellule de la cellule cliquée à la cellule active
- 28. Création d'une barre de défilement verticale dans DataGridView sans accrochage sur la cellule
- 29. Comment désactiver le comportement de peinture par défaut de l'événement de défilement de roue sur JScrollPane
- 30. Tableur Farpoint - Désactiver le menu contextuel des cellules
faire défiler la cellule éditée dans le rect visible est le comportement par défaut _not_ au démarrage d'une modification par programmation (via editCellAt, vérifié jdk 6/7) - pourrait être votre code change la sélection avec le démarrage de l'édition? – kleopatra