Scrollpane [Résolu]

Messages postés
12
Date d'inscription
vendredi 10 décembre 2010
Dernière intervention
9 février 2011
- 8 févr. 2011 à 16:58 - Dernière réponse :
Messages postés
12
Date d'inscription
vendredi 10 décembre 2010
Dernière intervention
9 février 2011
- 9 févr. 2011 à 11:05
Voici mon petit problème

J'ai une application avec des boutons qui fonctionne ds un applet.

quand j'ajoute le code //scroll// ci-dessous, les boutons sont tjs là mais le contenu de la fenetre n'apparait plus.

I am thankful, agradecido, very reconnaissant enversla personne qui me dépannera.

voici le code de la page de tête:

public class fen_boutons extends JApplet {
//private JButton bouton = new JButton("Cliquez");
JButton bIter_0 = new JButton ("Placette initiale");
JButton bIter_1 = new JButton ("Une itération");
JButton bQuitter = new JButton ("Quitter");

dessin page = new dessin();

public void init() {

this.add(new des_boutons(page), "North");

// ajout code scroll
JPanel scrollContainer = new JPanel();
JScrollPane scroll = new JScrollPane(scrollContainer);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scroll);
// fin scroll

this.add(page , "Center");
}
}
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
9 févr. 2011 à 10:29
3
Merci
Salut,

Le fait que ton panel ne soit pas 'borné' à une importance dans la gestion des scroll avec ton ihm, il est donc important d'appeler la méthode setPreferredSize de ton objet dessin.

Je t'ai fait un petit exemple avec 2 boutons, un objet pour le dessin qui se trouve dans un JScrollPane et d'une classe pour les events :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;

public class TestScroll extends JApplet {

private static final long	serialVersionUID	= 5422999913265609803L;
private JButton			buttonDraw		= null;
private JButton			buttonClear		= null;
private JCanvas			canvas			= null;

public void init() {
final JPanel contentPane = (JPanel) getContentPane();
final JPanel buttons = new JPanel();
buttons.setLayout(new FlowLayout(FlowLayout.LEFT));
buttons.add(getButtonDraw());
buttons.add(getButtonClear());

contentPane.add(buttons, BorderLayout.NORTH);

final JScrollPane scroll = new JScrollPane(getCanvas());
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

contentPane.add(scroll, BorderLayout.CENTER);

final ButtonActions actions = new ButtonActions(this);
getButtonClear().addActionListener(actions);
getButtonDraw().addActionListener(actions);
}

public JCanvas getCanvas() {
if (canvas == null) {
canvas = new JCanvas();
canvas.draw();// on fait un ptit paint pour la route
}
return canvas;
}

public JButton getButtonDraw() {
if (buttonDraw == null) {
buttonDraw = new JButton();
buttonDraw.setText("Draw");
}
return buttonDraw;
}

public JButton getButtonClear() {
if (buttonClear == null) {
buttonClear = new JButton();
buttonClear.setText("Clear");
}
return buttonClear;
}

}

class JCanvas extends JPanel {

private static final long		serialVersionUID	= 2875640105363885805L;
private static final Ellipse2D.Double 	CIRCLE 			= new Ellipse2D.Double(50, 50, 400, 400);
private boolean				clear			= true;

public JCanvas() {
// force le JScrollPane à recalculer la taille du viewport
// ici je me foule pas et j'utilise des valeurs fixes
setPreferredSize(new Dimension(800, 600));
}

public void paintComponent(final Graphics g) {
g.clearRect(0, 0, getWidth(), getWidth());
if (!clear) {
final Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(0xFF, 0x00, 0x00, 0x7F));// rouge avec chanel
// alpha
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON); // lissage de l'ellipse
g2.fill(CIRCLE);
g2.dispose();
}
}

public void draw() {
clear = false;
repaint();
}

public void clear() {
clear = true;
repaint();
}
}

class ButtonActions implements ActionListener {

private TestScroll	adaptee	= null;

public ButtonActions(final TestScroll adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(final ActionEvent e) {
final Object o = e.getSource();
SwingUtilities.invokeLater(new Runnable() {

public void run() {

if (o.equals(adaptee.getButtonDraw())) {
final JCanvas canvas = adaptee.getCanvas();
canvas.draw();
} else if (o.equals(adaptee.getButtonClear())) {
final JCanvas canvas = adaptee.getCanvas();
canvas.clear();
}
}
});
}

}








------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Twinuts
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
8 févr. 2011 à 20:23
0
Merci
Salut,

je comprends pas trop ce que tu as voulu faire...
tu ajoutes l'objet des_boutons au nord de ton contentpane (ok)
tu ajoutes l'objet scroll (sans préciser de position ; par défaut au centre si je me trompe pas ; pourquoi pas)
tu ajoutes l'objet page au centre (ok mais ici tu écrases l'objet scroll...)

si ce que tu cherches à faire c'est de mettre l'objet page dans le scroll il faut modifier ton code comme suit :

public class fen_boutons extends JApplet {
//private JButton bouton = new JButton("Cliquez");
JButton bIter_0 = new JButton ("Placette initiale");
JButton bIter_1 = new JButton ("Une itération");
JButton bQuitter = new JButton ("Quitter");

dessin page = new dessin();

public void init() {

this.add(new des_boutons(page), "North");
this.add(new des_boutons(page), BorderLayout.NORTH); // plus lisible

// ajout code scroll
JPanel scrollContainer = new JPanel();
JScrollPane scroll = new JScrollPane(scrollContainer);
JScrollPane scroll = new JScrollPane(page); //ajout de page dans le scroll
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scroll);
this.add(scroll, BorderLayout.CENTER);
// fin scroll

this.add(page , "Center");
}
}




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
vendredi 10 décembre 2010
Dernière intervention
9 février 2011
8 févr. 2011 à 21:28
0
Merci
Merci, merci!

c'est déjà bcp mieux, reste que mes barres de défilements sont muettes ... ou plutôt sourdes, elles ne bougent rien !

et ma fenetre déborde largement de l'écran
Commenter la réponse de Tapatoudi
Messages postés
5293
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
19 novembre 2018
8 févr. 2011 à 21:55
0
Merci
Salut,

tu fais quand dans la classe dessine ?




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
vendredi 10 décembre 2010
Dernière intervention
9 février 2011
9 févr. 2011 à 07:57
0
Merci
Dans la classe dessin je fais appel à des méthodes 'iteration-x' qui calculent des coordonnées de points qui se déplacent au cours d'un certain nombre d'itérations

voila le code de cette classe

public class dessin extends JPanel {

private Color couleur = Color.green;
public final static Color couleurFond = Color.white;
private placette_iter P;

public dessin() {
BorderLayout.CENTER);
P = new placette_iter(100, 0, couleur);
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
P.dessine(g);
// dessine le tableau final
this.repaint();
}

public void placette_initiale () {
P = new placette_iter(100, 0, Color.black);
}

public void iteration_1 () {
P = new placette_iter(100, 1, Color.white);
}

public void iteration_2 () {
P = new placette_iter(100, 2, Color.white);
}

public void iteration_3 () {
P = new placette_iter(100, 3, Color.white);
}
public void iteration_4 () {
P = new placette_iter(100, 4, Color.white);
}

public void iteration_20 () {
P = new placette_iter(100, 20, Color.white);
}

}
Commenter la réponse de Tapatoudi
Messages postés
12
Date d'inscription
vendredi 10 décembre 2010
Dernière intervention
9 février 2011
9 févr. 2011 à 11:05
0
Merci
Super! merci 10(x) fois

j'ai juste ajouté la ligne
setPreferredSize(new Dimension(800, 600));

et ça fonctionne!

Vous m'avez rendu un grand service, je buttais sur ce point technique et sans cela impossible de montrer tout le panneau (que je dois ajuster à 1100 x 1100) pour ma future présentation
Commenter la réponse de Tapatoudi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.