Scroollbouton

cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005 - 5 févr. 2005 à 17:33
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005 - 16 févr. 2005 à 18:15
Bonjour tout le monde !
Je voudrais utiliser deux boutons (flèches gauche et droite) qui me serviraient de boutons de défilement pour un Panel (comme un scrollpane), style le Chat de voila.fr où 2 boutons de défilement apparaissent s'il n'y a plus de places pour ts les composants.
Quelqu'un pourrait-il m'aiguiller ? Etant donné que c'est assez urgent, ça serait cool si vous pouviez m'aider urgemment !
Az"

14 réponses

dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
6 févr. 2005 à 00:34
Utilise un scrollpane justement et les boutons feront bouger la vue (Viewport)

-------------------
dams
-------------------
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
6 févr. 2005 à 00:45
Un scrollpane traditionnel ? C'est ce que j'ai déjà mais ce n'est pas du tout beau.
En fait, je voudrais que deux boutons que j'aurais moi-même crées (boutons perso que j'ai crée à partir de canvas) servent à faire défiler des composants qui sont sur un panel donné, comme le Chat de voila.fr ou plein d'autres clients Chat.
Merci
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
6 févr. 2005 à 11:15
kaloway



la solution est d'associer un setLayout(null) à la fenêtre et commander la position du panel avec setbound ou setlocation.
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
6 févr. 2005 à 14:10
Bonjour ! Re-moi

//le Panel qui va contenir les labels où viendront s'aouter dynamiquement les composants
Panel monPanelALabels=new Panel();
monPanelALabels.setLayout(null);


Label premLabel=new Label("label 1");
Label deuxLabel=new Label("label 2");
Label troisLabel=new Label("label 3");
Label derLabel=new Label("Dernier label, il n'y a plus de place");


monPanelALabels.add(premLabel);
monPanelALabels.add(deuxLabel);
monPanelALabels.add(troisLabel);
monPanelALabels.add(derLabel);



//le Panel qui va contenir les boutons de direction (défilement)
Panel monPanelABoutons=new Panel(new BorderLayout());
Button droite=new Button("deplacement à droite");
Button gauche=new Button("deplacement à gauche");


monPanelABoutons.add("North",droite);
monPanelABoutons.add("South",gauche);

Maintenant, comment je fais concrètement pour que mes boutons gauche et droite fassent défiler le Panel "monPanelALabels" avec setlocation ou setbound ? Merci énormement !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
6 févr. 2005 à 20:26
kaloway



int hauteur=100;//hauteur du rang

int largeur=150;//largeur de la colonne

Panel monPanelALabels=new Panel();
monPanelALabels.setLayout(null);


premLabel.setSize(hauteur,largeur)//taille du label
deuxLabel.setSize(hauteur,largeur)

troisLabel.setSize(hauteur,largeur)

derLabel.setSize(hauteur,largeur)



int n=0;//indice de décalage de colonne



positionne les labels



premLabel.setLocation(hauteur,n+largeur)
deuxLabel.set
Location
(hauteur,(n+1)*largeur)

troisLabel.set
Location
(hauteur,(n+2)*largeur)

derLabel.set
Location
((hauteur,(n+3)*largeur)



ajout d'un ecouteur pour le bouton droit




droite.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ev)

{


n++;//incrémente n
donc décale d'une colonne les
labels




premLabel.setLocation(hauteur,n+largeur)
deuxLabel.
setLocation
(hauteur,(n+1)*largeur)

troisLabel.
setLocation
(hauteur,(n+2)*largeur)

derLabel.
setLocation
((hauteur,(n+3)*largeur)





}

});



ajout d'un ecouteur pour le bouton gauche




gauche.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ev)

{

n--;//décrémente n


premLabel.setLocation(hauteur,n*largeur)
deuxLabel.
setLocation
(hauteur,(n+1)*largeur)

troisLabel.
setLocation
(hauteur,(n+2)*largeur)

derLabel.
setLocation
((hauteur,(n+3)*largeur)






}

});
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
6 févr. 2005 à 23:18
Merci beaucoup !
Je vais essayer ça et j'espère que ça marchera ! Dans tous les cas, merci énormement !
Az"
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
7 févr. 2005 à 20:35
re-lut !
Si j'ai bien compris, après avoir défini la taille des boutons et les avoir positionnés (setLocation), il faut que je les ajoute à mon Panel dont le setLayout = null. Auquel cas, rien ne s'affiche.
Je suis complètement perdu et je vais tout grrrrr. Mdr !
Je chercher et je cherche. Merci pour votre aide, les gars
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
8 févr. 2005 à 13:11
kaloway

Peux tu mettre ton code?
Qu'est ce qui s'affiche exactement?
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
8 févr. 2005 à 15:40
Salut Kaloway !

Voici à peu près le code (sans trop renter ds le détail)

public class Ecouteur implements ActionListener

{ private int code;
public Ecouteur(int n)
{
code=n;
}
public void actionPerformed(ActionEvent ev)
{
switch(code) {
case 1 : System.out.println("1"); //PanPub.envMsg(); break;

case 1 : PanSalon.droiter(); break;
case 2 : PanSalon.gaucher();break;

}
}
}






public class PanSalon extends Frame
{ String nomDuSalon;

Panel premPanel;
Panel deuxPanel;
Panel troisPanel;
Panel quatrPanel;


//int n=0;



public PanSalon (String nomSalon)
{
int hauteur=150;
int largeur=50;



nomDuSalon=nomSalon;

premPanel=new Panel();
deuxPanel=new Panel();
deuxPanel.setLayout(null);

troisPanel=new Panel();
quatrPanel=new Panel();



Button gauche=new Button("<");
Button droite=new Button(">");

//Ecouteur droit=new Ecouteur(1);
//Ecouteur gauch=new Ecouteur(2);

//droite.addActionListener(droit);
// gauche.addActionListener(gauch);





premBouton.setSize(hauteur,largeur);
deuxBouton.setSize(hauteur,largeur);
troisBouton.setSize(hauteur,largeur);
quatrBouton.setSize(hauteur,largeur);
cinqBouton.setSize(hauteur,largeur);



premBouton.setLocation(hauteur,n*largeur);
deuxBouton.setLocation(hauteur,(n+1)*largeur);
troisBouton.setLocation(hauteur,(n+2)*largeur);
quatrBouton.setLocation(hauteur,(n+3)*largeur);
cinqBouton.setLocation(hauteur,(n+4)*largeur);



deuxPanel.add(premBouton);
deuxPanel.add(deuxBouton);
deuxPanel.add(troisBouton);
deuxPanel.add(quatrBouton);
deuxPanel.add(cinqBouton);



troisPanel.add(deuxPanel);
troisPanel.add(gauche);
troisPanel.add(droite);


}


/*
public static void droiter()
{
n++;
premBouton.setLocation(hauteur,n*largeur);
deuxBouton.setLocation(hauteur,largeur+n);
troisBouton.setLocation(hauteur,largeur+n);
quatrBouton.setLocation(hauteur,largeur+n);
cinqBouton.setLocation(hauteur,largeur+n);
}


public static void droiter()
{
n--;
premBouton.setLocation(hauteur,n*largeur);
deuxBouton.setLocation(hauteur,largeur+n);
troisBouton.setLocation(hauteur,largeur+n);
quatrBouton.setLocation(hauteur,largeur+n);
cinqBouton.setLocation(hauteur,largeur+n);
}
*/
}

Donc, quand je mets en commentaire la ligne où le Layout de deuxPanel est null, les composants s'affichent. Sinon, rien du tout !
Merci pour ton aide
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
8 févr. 2005 à 17:37
Je me demande s'il ne faut pas que mon Panel que je veux faire défiler n'implemente pas Scrollable ? Auquel cas, comment ça va fonctionner ?
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
8 févr. 2005 à 21:31
kaloway



voila un code que j'ai testé qui fait défiler les boutons de doite à gauche et inversement.



à toi de l'adapter à tes besoins. surtout ne pas oublier setPreferredSize qui donne une dimesion minimun au component et panel.





import java.awt.event.*;

import java.awt.*;

import javax.swing.*;





public class PanSalon extends JFrame

{ String nomDuSalon;



JPanel premPanel;

JPanel deuxPanel;

JPanel troisPanel;



JButton premBouton;

JButton deuxBouton;

JButton troisBouton;

JButton quatrBouton;

JButton cinqBouton;



int n=0;

int hauteur;

int largeur;



public PanSalon (String nomSalon)

{

Container contenu=getContentPane();

hauteur=50;

largeur=150;



premBouton=new JButton("premBouton");

deuxBouton=new JButton("deuxBouton");

troisBouton=new JButton("troisBouton");

quatrBouton=new JButton("quatrBouton");

cinqBouton=new JButton("cinqBouton");





//nomDuSalon=nomSalon;



premPanel=new JPanel();

deuxPanel=new JPanel();

troisPanel=new JPanel();

quatrPanel=new JPanel();



deuxPanel.setPreferredSize(new Dimension(750,50));

deuxPanel.setLayout(null);









JButton gauche=new JButton("");







droite.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent ev) {

n++;

premBouton.setLocation(n*largeur,0);

deuxBouton.setLocation((n+1)*largeur,0);

troisBouton.setLocation((n+2)*largeur,0);

quatrBouton.setLocation((n+3)*largeur,0);

cinqBouton.setLocation((n+4)*largeur,0);

}

});

gauche.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent ev) {

n--;

premBouton.setLocation(n*largeur,0);

deuxBouton.setLocation((n+1)*largeur,0);

troisBouton.setLocation((n+2)*largeur,0);

quatrBouton.setLocation((n+3)*largeur,0);

cinqBouton.setLocation((n+4)*largeur,0);

}

});











premBouton.setSize(largeur,hauteur);

deuxBouton.setSize(largeur,hauteur);

troisBouton.setSize(largeur,hauteur);

quatrBouton.setSize(largeur,hauteur);

cinqBouton.setSize(largeur,hauteur);





premBouton.setLocation(n*largeur,0);

deuxBouton.setLocation((n+1)*largeur,0);

troisBouton.setLocation((n+2)*largeur,0);

quatrBouton.setLocation((n+3)*largeur,0);

cinqBouton.setLocation((n+4)*largeur,0);





deuxPanel.add(premBouton);

deuxPanel.add(deuxBouton);

deuxPanel.add(troisBouton);

deuxPanel.add(quatrBouton);

deuxPanel.add(cinqBouton);





troisPanel.add(deuxPanel);

troisPanel.add(gauche);

troisPanel.add(droite);





contenu.add(troisPanel);



}



public static void main(String arg[]){

PanSalon fen= new PanSalon("zz");

fen.setSize(750,150);

fen.setVisible(true);

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}



}
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
8 févr. 2005 à 22:07
Ok Kaloway !

Merci beaucoup !

Je vais effectivement l'adapter à mon cas ! Thanks a lot !
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
12 févr. 2005 à 13:15
Hi Kaloway !

Je suis venu ici, rien que pour te remercier franchement pour ton aide !
Malgré la réponse que tu m'avais donnée, j'ai essayé de passer par un scroll personnalisé, en faisant des trucs de "Ouff" et je me suis pris la tête pdt 3 jours. Je me disais que le seul pb avec ta solution c'est qu'on ne pouvait pas ajouter dynamiquement des boutons (c'est qui est problématique pour un chat qui ajoute dynamiquement des boutons par rapport à un dial ouvert). En effet, les boutons où il y a les listener (gauche et droite) ne pouvaient pas intéragir avec les boutons nouvellement crées.

Aussi, pour aider ceux qui pourraient avoir besoin de résoudre un pb semblable au mien, voilà un complément à ta solution (en Awt pour ceux qui ont des pb de compatibilité).
Ca fait donc un joli ScrollButton (boutons qui font office de "scrollba").
Thanks Kalloway
.....
.
.
.
public class Test
{
private static int hauteur=50;
private static int largeur=25;
private int n;
private static int m;

private static Vector vectorButton=new Vector();
private Panel deuxPanel;
private Panel troisPanel;
private quatrPanel;

private Button premBouton;
private Button deuxBouton;
private Button troisBouton;

private Button gauche;
private Button droite;

public Test()
{ n=0;
m=0;

deuxPanel=new Panel();
deuxPanel.setLayout(null);
deuxPanel.setSize(400,25);

troisPanel=new Panel();
quatrPanel=new Panel(new BorderLayout());
quatrPanel.setSize(100,25);

premBouton=new Button("1");
premBouton.setSize(hauteur,largeur);
deuxBouton=new Button("2");
deuxBouton.setSize(hauteur,largeur);
troisBouton=new Button("3");
troisBouton.setSize(hauteur,largeur);
gauche=new Button("<");
droite=new Button(">");

vectorButton.add(premBouton);// A chaque nouveau bouton crée, on l'ajoute au vecteur
vectorButton.add(premBouton);
vectorButton.add(premBouton);

premBouton.setLocation(n*largeur,0);
deuxBouton.setLocation((n+1)*largeur,0);
troisBouton.setLocation((n+2)*largeur,0);

deuxPanel.add(premBouton);
deuxPanel.add(deuxBouton);
deuxPanel.add(troisBouton);

droite.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ev) {
m--;
int z=m;
Button c;
synchronized(vectorButton)
{ for (int i = 0; i < vectorButton.size(); i++)
//on récupère par conséquent les objets de type Button qui sont dans le vecteur
c = (Button) vectorButton.get(i);
c.setLocation(z*hauteur,0);//on les repositionne ici grâce à setLocation
z++;
}
}
});

gauche.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ev) {
m++;
int z=m;
Button c;
synchronized(vectorButton)
{ for (int i = 0; i < vectorButton.size(); i++)
{
c = (Button) vectorButton.get(i);/
c.setLocation(z*hauteur,0);
z++;
}

}
}
});

troisPanel.add(gauche);
troisPanel.add(droite);

quatrPanel.add("Center",deuxPanel);
quatrPanel.add("East",troisPanel);
}

}
0
cs_anzize Messages postés 41 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 9 juin 2005
16 févr. 2005 à 18:15
Monologuqe n° X (lol). Promis, c'est mon dernier message (mais c'est parce que j'ai trop galérer pour pas grand chose.
A tous ceux qui veulent donc créer un customized ScrollPane (ScrollPane personnalisé), voici un truc tout simple.

/*Squellette du code sans constructeur ni quoi que ce soit. Il faut juste comprendre l'idée */

int valeurX,valeurY;
valeurX=0;valeurY=20;//C'est un pure exemple
panel panl1 =new Panel();
panel pan2=new Panel();

ScrollPane sc=new ScrollPane(2); //création d'un scrollPanel
//sans affichage des barres de défilement
sc.add(panel1);

Button b1=new Button(">");
Button b2=new Button("<");

b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ev) {
valeurX++; //ou valeurX=valeurX+nombre qu'on veut;
sc.setScrollPosition(valeurX,valeurY);
}
});

/*ajouter même listenner pour b2, sauf que valeurX et valeurY vont à l'opposé*/

Les boutons b1 et b2 vont ainsi faire défiler panel1. Evidemmet, si vous savez créer des beaux boutons ronds ou RoundRect ou triangulaire (ou blabalabal), vous aurez de très beaux ScrollPanes personnalisés.
For more questions, www.parisboulot.com
0
Rejoignez-nous