Téléchargement
illégal
Posez votre question Signaler

Langage Java : repaint() [Résolu]

Xeldal - Dernière réponse le 3 déc. 2010 à 17:58
Bonjour,
Je dois créer un Tutorial pour un projet en java. Mon idée était de faire une seule fenêtre et d'incrémenter un compteur pour changer de panel à chaque fois. J'ai donc 2 boutons :
Précédent et Suivant. Précédent n'est pas présent quand le compteur est à zéro et Suivant n'est pas présent quand le compteur est au max. J'aimerai avec un repaint afficher ou non les boutons grâce au compteur qui s'incrémente dans les écouteurs. Les écouteurs marchent puisque le bouton suivant change de couleur quand je clique dessus mais je n'arrive pas à afficher le bouton précédent quand je clique sur le bouton suivant. Le bouton précédent s'affiche quand je met le compteur à 1.
package Objectif3D;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Tutorial3D extends JFrame{
JPanel Bas,Haut;
JPanel[] Gauche ,Droite;
JButton Precedent, Suivant;
int i=0, max=3, min=0;
public Tutorial3D(){
initComponents();
}
private void initComponents(){
this.setTitle("Tutorial Java 3D");
this.setSize(1000, 800);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new GridLayout(2,1));
Haut = new JPanel();
Haut.setLayout(new GridLayout(1,2));
Haut.setSize(100,100);
Bas = new JPanel();
Bas.setLayout(new GridLayout(1,2));
Bas.setSize(100,20);
Precedent = new JButton("Précédent");
Precedent.setActionCommand("Precedent");
Precedent.setSize(50,20);
Suivant = new JButton("Suivant");
Suivant.setSize(50,20);
if (i == min){
Precedent.setVisible(false);
}else{
Precedent.setVisible(true);
}
if (i == max){
Suivant.setVisible(false);
}else{
Suivant.setVisible(true);
}
Bas.add(Precedent);
Bas.add(Suivant);
Suivant.addActionListener(new btnDeplacement());
Precedent.addActionListener(new btnDeplacement());
this.add(Haut);
this.add(Bas);
}
class btnDeplacement implements ActionListener {
public void actionPerformed(ActionEvent evt) {
if (evt.getActionCommand().equals("Suivant")) {
i++;
if (i == 1){
Suivant.setForeground(Color.cyan);
}else if(i==2){
Suivant.setForeground(Color.yellow);
}else if(i==3){
Suivant.setForeground(Color.green);
}
repaint();
}else if (evt.getActionCommand().equals("Precedent")){
i--;
Precedent.setForeground(Color.cyan);
repaint();
}
}
}
public static void main(String[] args) {
Tutorial3D FenTuto = new Tutorial3D();
FenTuto.setVisible(true);
}
}
Lire la suite 

Langage Java : repaint() »

9 réponses
Réponse
+0
moins plus
Yep

ben je suis toujours pas sur d'avoir compris à 100% ce que tu attends mais si ton but c'est de faire disparaitre précédent lors du clic sur précédent lorsque le compteur arrive à 1 tu fais :

if (evt.getActionCommand().equals("Precedent")){ 
if(i > 1){ 
i--; 
precedent.setVisible(true);
}
else{ precedent.setVisible(false); }
} 


ou un truc dans le genre... Qu'en penses tu ?

Toopa
Ajouter un commentaire
Réponse
+0
moins plus
Pour le bouton ça marcherais mais au final je voudrais créer un tableau de Panel qui dépendrais de la variable "i" et quand je i augmente avec le clique la fenêtre fait un refresh et affiche le panel qui correspond.

Par exemple :
Panel[0] : Photo / Panel[1] Texte. Quand je lance l'appli je vois la photo et quand je clique sur le bouton, le "i" augmente, la fenêtre se refresh et il m'affiche le texte au lieu de la photo.
Ajouter un commentaire
Réponse
+0
moins plus
Certes, mais ton JPanel (contenant l'image que tu veux afficher) n'a rien à voir avec les boutons. Il est un composant de ta Frame, tout comme tes boutons.

Donc ton refresh en fait c'est juste de remplacer un JPanel par un autre dans ta JFrame.
latoopa- 3 déc. 2010 à 16:06
Ou même mieux. Tu peux juste modifier le contenu de ton JPanel en lui mettant une image contenue dans un tableau.
Ajouter un commentaire
Réponse
+0
moins plus
En fait j'ai regardé ton programme et je l'ai un peu bricolé.. Dis moi ce que tu en penses et si tu veux des explications :

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Tutorial3D extends JFrame implements ActionListener{ 
	
	private static final long serialVersionUID = 1L;
	JPanel Bas,Haut; 
	JPanel[] Gauche ,Droite; 
	JButton Precedent, Suivant; 
	int i=0, max=3, min=0; 
	
	public Tutorial3D(){ 
		initComponents(); 
	} 

	private void initComponents(){ 
		
		setTitle("Tutorial Java 3D"); 
		setSize(1000, 800); 
		setLocationRelativeTo(null); 
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		setLayout(new GridLayout(2,1)); 
		
		Haut = new JPanel(); 
		Haut.setLayout(new GridLayout(1,2)); 
		Haut.setSize(100,100); 
		
		Bas = new JPanel(); 
		Bas.setLayout(new GridLayout(1,2)); 
		Bas.setSize(100,20);
		
		Precedent = new JButton("Précédent");
		Precedent.addActionListener(this);
		Precedent.setSize(50,20);
		Precedent.setEnabled(false);
		Bas.add(Precedent);
				
		Suivant = new JButton("Suivant"); 
		Suivant.addActionListener(this);
		Suivant.setSize(50,20); 
		Bas.add(Suivant);

		add(Haut);
		add(Bas); 	
	} 
		
	public void actionPerformed(ActionEvent e) { 
			
		if (e.getSource() == Suivant) { 
			
			if(i<3)
				i++;
			
			System.out.println("Valeur de i : "+i);
			Precedent.setEnabled(true);		// tu ne peux pas atteindre i=0 en cliquant sur suivant
			
			switch(i){ // donc pas de "case 0" à gérer... ici
				case 1 :
					Suivant.setForeground(Color.cyan);
					break;
					
				case 2 :
					Suivant.setForeground(Color.yellow);
					break;
					
				case 3 :
					Suivant.setForeground(Color.green);
					Suivant.setEnabled(false);	// désactivation du bouton suivant en fin de compteur
					break;
			}
		}
		else if (e.getSource() == Precedent){ 
			if(i>0)	
				i--;
			
			System.out.println("Valeur de i : "+i);
			Suivant.setEnabled(true);		// tu ne peux pas atteindre i=3 en cliquant sur précédent
			
			switch(i){ // donc pas de "case 3" à gérer... ici
				case 1 :
					Suivant.setForeground(Color.cyan);
					break;
					
				case 2 :
					Suivant.setForeground(Color.yellow);
					break;
					
				case 0 :
					Suivant.setForeground(Color.green);
					Precedent.setEnabled(false);	// désactivation du bouton suivant en fin de compteur
					break;
			} 
		} 
	} 
		
	public static void main(String[] args) { 
			Tutorial3D FenTuto = new Tutorial3D(); 
			FenTuto.setVisible(true); 
	}
}
Xeldal - 3 déc. 2010 à 17:58
Bah tu contournes un peu ce que je veux faire. Ce que tu viens de me link je sais le faire. Mon problème c'est que je veux faire un refresh de la fenêtre et que j'y arrive pas. J'ai du mal m'expliquer : / . Au final mon problème c'est que je compte afficher dans ma fenêtre des choses en fonction de la variable "i" pour éviter de créer plein de fenêtre avec un lien entre elle ou de mettre 10 Panel non visiblement pendant que j'en affiche un.
Ajouter un commentaire
Réponse
-1
moins plus
Salut.

Pourquoi repaint() ?
Il y a bien plus facile. Non ?

Toopa
Xeldal - 2 déc. 2010 à 17:25
C'est ce qu'on m'a apprit à l'IUT. Il existe autre chose que repaint() pour rafraîchir une page?
Ajouter un commentaire
Réponse
-1
moins plus
Up du post
Ajouter un commentaire
Ce document intitulé « Langage Java : repaint() » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?