JScrollPane et Composite
Donc, je suis en train de faire une sorte d'éditeur de texte, et j'ai besoin d'un JScrollPane pour la navigation verticale.
Mais je ne peux pas le faire fonctionner.
J'ai lu chaque flipper tutoriel sur les dix premières pages de résultats de google, et je ne peux pas le faire fonctionner.
Permet de dire que j'ai JFrame (taille 1000x800). Je veux mettre un Composite (1000x2000), de façon à l'horizontale alignes avec la JFrame. Je veux m'en tenir à une simple barre de défilement sur le côté droit de la Composite pour que je puisse faire pour le reste.
J'ai réduit les tailles, j'ai ajouté un Composite à JScrollBar et vice versa, a ajouté l'un d'eux à JFrame, les deux, aucun, mais rien.
Donc, à ce stade, je n'aurais pas l'esprit d'un couple de lignes de code terminé...
EDIT: Fine, voici le code...
mWindow = new JFrame(lang.getString("title"));
mWindow.setSize(1000, 800);
mWindow.setLocationRelativeTo(null);
mWindow.setResizable(false);
mWindow.setLayout(null);
mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mWindow.setVisible(true);
workspace = new JPanel();
workspace.setBounds(0,0, 1000, 1203);
workspace.setBackground(Color.RED);
scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setBounds(0, 20, 600, 600);
//scroll.setLayout(null);
mWindow.getContentPane().add(scroll);
mWindow.repaint();
mWindow.validate();
Qui montre une partie d'un Composite (600X600, (JScrollPane taille)), et montre les barres de défilement, mais n'est-ce pas défilement
Eh bien, rien de vraiment... C'est juste les plus fondamentaux chose... ce que je fais, ni de composants jamais... je pense qu'il est beaucoup plus facile de penser le code (il ne peut pas être plus de 10 lignes), que d'aller au creux de mon charabia et la recherche de bugs...
Une approche consiste à définir votre JScrollPane de la taille de votre cadre du volet de contenu, puis définissez sa fenêtre comme votre Composite, qui a une taille plus grande.
NE PAS UTILISER LA VALEUR NULL MISE EN PAGE. Au lieu de cela, lire le chapitre sur l'LayoutManagers (dans le tutoriel référencé dans le swing de la balise) et essayer de comprendre l'interaction entre la mise en page des indices (comme prefSize) et layoutManager. Ensuite, lisez le JScrollPane doc api qui vous oriente vers un autre chapitre du tutoriel, en plus d'expliquer comment ce qui régit son propre dimensionnement plus ...
OriginalL'auteur Karlovsky120 | 2012-08-17
Vous devez vous connecter pour publier un commentaire.
Donc, je l'ai fait vraiment de test rapide et il fonctionne très bien pour moi...
Et le cadre de test
Qui produit ce:
Sur une note de côté, je ne sais pas pourquoi les gens insistent sur l'utilisation de null mises en page, ils ont juste causer plus de problèmes et la douleur du cœur alors qu'ils valent. Prenez le temps de trouver quelques simples gestionnaires de disposition. Je déteste VB pour beaucoup de raisons, mais la mise en page de gestion est en haut de ma liste, à mon humble avis
vous auriez plus de chance avec un marteau 😉 - mise à Jour ajoutée, merci 😀
+1 - satisfait, merci 🙂
OriginalL'auteur MadProgrammer
Essayer en appliquant
méthode sur votre panneau, au lieu de la méthode setSize ().
Comme ceci:
Vous avez un problème avec une taille réduite, non?
Non, j'ai réussi forcer le programme à montrer une partie de Composite, il a les dimensions d'un composant scrollpane, et de son emplacement, mais pas de barres de défilement sont indiqués... Et, à propos de votre code, j'ai null mise en page, et j'aimerais continuer dans cette voie...
J'ai édité avec exemple. Augmenter vos dimensions ou de réduire la taille de cadre et vous verrez les barres de défilement.
Mon Composite est environ quatre fois plus grand que JScrollPane... Et le bizarre c'est que, si je réduis un Composite de taille de moins de JScrollpanes, il remplit encore l'ensemble du composant scrollpane...
OriginalL'auteur Branislav Lazic
Je ferais:
setPreferredSize si rien n'y fait.
est juste que ce n'est pas un null mise en page; bien que le Composite doit obtenir une taille spécifiée.
OriginalL'auteur Joop Eggen
pourquoi n'essayez-vous pas quelque chose comme cela, et l'appeler à partir de votre classe qui crée votre image.
OriginalL'auteur Joe McJava