A voir également:
- Java : problème de JPanel
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Java jre - Télécharger - Langages
- Jeux java itel 5360 ✓ - Forum Mobile
3 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
29 juin 2012 à 19:53
29 juin 2012 à 19:53
Alors je me suis plongé dans les profondeurs obscurs de ton code ^^
J'avoue que j'aurai beaucoup de chose à en dire, mais si je commence à modifier ton code, je changerai tout... ou presque !
Alors pour l'instant je vais juste te donner deux changements pour stabiliser ton code :
Dans placeLabel(), remplace cette ligne :
J'avoue que j'aurai beaucoup de chose à en dire, mais si je commence à modifier ton code, je changerai tout... ou presque !
Alors pour l'instant je vais juste te donner deux changements pour stabiliser ton code :
Dans placeLabel(), remplace cette ligne :
temp += pas_x;Par celle-ci :
temp += pas_x+lab.getIcon().getIconWidth();Et dans setOnglet(index), rajoute :
for (Component c : save) c.setVisible(false); save.get(index).setVisible(true);
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
28 juin 2012 à 22:56
28 juin 2012 à 22:56
Salut !
Il y a un "m" qui se promène en plein milieu du code, et il faudrait que ta classe soit public.
Sinon, est-ce que tu aurais une classe de test que l'on puisse exécuter le code ?
Il y a un "m" qui se promène en plein milieu du code, et il faudrait que ta classe soit public.
Sinon, est-ce que tu aurais une classe de test que l'on puisse exécuter le code ?
Je vous fournis le code qui permet de tester, mais il faut des images pour pouvoir changer d'onglet, j'ai pas prévu de mode avec du texte car ça ne me servira pas.
ClassTest que je viens de faire :
la Fenetre
et le Main :
PS : Oui, la moitié (voir plus) des import servent à rien (en tout cas pour l'instant) et je sais aussi que le positionnement en absolu avec layout(null) c'est pas beau mais si ça existe pourquoi ne pas s'en servir?
Bref. Sinon faut changer les images sinon les JLabels vont être invisibles, et on peut pas changer d'onglet.
ClassTest que je viens de faire :
import javax.swing.*; import java.applet.Applet; import java.applet.AudioClip; import java.awt.*; import java.awt.event.*; import java.net.URL; import java.util.*; import java.awt.Dimension; class ClassTest extends JPanel implements MouseListener { public void mouseExited(MouseEvent evt) { } public void mouseReleased(MouseEvent evt) { } public void mousePressed(MouseEvent evt) { } public void mouseEntered(MouseEvent evt) { } public void mouseClicked(MouseEvent evt) { } public ClassTest() { setLayout(null); // création des onglets OngletManager onglets = new OngletManager(0,0,0,50); ImageIcon img3 = new ImageIcon("images/visuels/onglets/boutique.png"); ImageIcon img = new ImageIcon("images/visuels/onglets/exploration.png"); ImageIcon img2 = new ImageIcon("images/visuels/onglets/inventaire.png"); JLabel txt1 = new JLabel("Panel1"); JLabel txt2 = new JLabel("Panel2"); JLabel txt3 = new JLabel("Panel3"); JPanel onglet1 = new JPanel(); JPanel onglet2 = new JPanel(); JPanel onglet3 = new JPanel(); onglet1.add(txt1); txt1.setBounds(400,400,200,60); onglet2.add(txt2); txt2.setBounds(400,400,200,60); onglet3.add(txt3); txt3.setBounds(400,400,200,60); onglets.addOnglet(img,onglet1); onglets.addOnglet(img2,onglet3); onglets.addOnglet(img3, onglet2); onglets.setOnglet(1); onglets.setOpaque(false); add(onglets); onglets.setBounds(0,0,1600, 900); } }
la Fenetre
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.awt.GraphicsEnvironment; class Fenetre extends JFrame { static ClassTest test1; private static final long serialVersionUID = 1L; public Fenetre() { setTitle("Space String Adventures ALPHA"); setPreferredSize(new Dimension(1600, 900)); pack(); test1 = new ClassTest(); setContentPane(test1); } }
et le Main :
import javax.swing.*; import java.applet.Applet; import java.applet.AudioClip; import java.awt.*; import java.awt.event.*; import java.net.URL; import java.util.*; public class Main { static Fenetre fenetre; public static void main(String args[]) { fenetre = new Fenetre(); fenetre.setVisible(true); fenetre.setLocationRelativeTo(null); fenetre.setResizable(false); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
PS : Oui, la moitié (voir plus) des import servent à rien (en tout cas pour l'instant) et je sais aussi que le positionnement en absolu avec layout(null) c'est pas beau mais si ça existe pourquoi ne pas s'en servir?
Bref. Sinon faut changer les images sinon les JLabels vont être invisibles, et on peut pas changer d'onglet.
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
28 juin 2012 à 23:59
28 juin 2012 à 23:59
Je regarderai le code de OngletManager demain, pour l'instant j'ai surtout défriché ta classe de test, et en fait on peux la simplifier pas mal, et se restreindre à ce code (plus c'est simple, mieux c'est)
import java.awt.Dimension; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Test { private static void ajouter(OngletManager onglets, String fileImg, String txt) { ImageIcon img = new ImageIcon(fileImg); JLabel label = new JLabel(txt); label.setBounds(400,400,200,60); JPanel onglet = new JPanel(); onglet.add(label); onglets.addOnglet(img, onglet); } public static void main(String[] args) { OngletManager onglets = new OngletManager(0,0,0,50); ajouter(onglets,"images/visuels/onglets/boutique.png","Panel1"); ajouter(onglets,"images/visuels/onglets/exploration.png","Panel2"); ajouter(onglets,"images/visuels/onglets/inventaire.png","Panel3"); onglets.setOnglet(1); onglets.setOpaque(false); onglets.setBounds(0,0,1600, 900); JPanel panel = new JPanel(); panel.setLayout(null); panel.add(onglets); JFrame fenetre = new JFrame(); fenetre.setTitle("Space String Adventures ALPHA"); fenetre.setPreferredSize(new Dimension(1600, 900)); fenetre.add(panel); fenetre.pack(); fenetre.setLocationRelativeTo(null); fenetre.setResizable(false); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setVisible(true); } }
30 juin 2012 à 00:36
30 juin 2012 à 01:06
Sinon, il y a plein de choses qui ne servent à rien, ou que l'on pourrait enlever facilement.
old_index par exemple, tu ne t'en sers jamais. Tes trois listes à mon avis sont superflux, en fait tu hérites de JPanel mais sans te servir de ce qui existe déjà... et du coup ça fait doublon !
Globalement c'est ton architecture de classe que je trouve bancale.
Je pense que tu aurais intérêt à faire une classe pour les "labels images" qui sont tes onglets en soit, et une autre classe pour ton "Manager" mais qu'il faudrait scinder en deux : une barre avec tes onglets, et en dessous les contenus en soit. Pour l'instant le contenu se mélange aux onglets et c'est bizarre.
Enfin, tu l'as déjà mentionné, tu utilises le layout null, et c'est vrai que c'est moche, surtout à cause des mélanges d'onglets que j'ai mentionné...
Bref, comme je l'ai dit, moi je changerais quasiment tout ^^
Modifié par Smith le 30/06/2012 à 01:29
Après je t'ai peut être mal compris...
Sinon pour l'histoire du old_index je m'en suis servit au départ mais plus maintenant, c'était un oubli, je l'ai donc enlevé. Sinon j'ai remplacé le extends JPanel par extends Container, je sais pas si ça change grand chose mais en tout cas je suis obligé d'extends ça au minimum puisque j'utilise quand même quelques méthodes de Container.
Sinon ça se lance mieux depuis que j'ai remis tous les panneaux à leur place, mais bon de toute façon c'est du java donc pas le summum de la rapidité...
30 juin 2012 à 02:12
Si je comprends bien, tu auras quand même deux zones distinctes, l'une avec les onglets, l'autre avec le contenu, et c'est en ça que je pense que tu aurais intérêts à scinder ton JPanel en deux. Après je proposais une coupure haut/bas pour me faire comprendre ce n'est pas l'essentiel.
"j'ai remplacé le extends JPanel par extends Container"
Effectivement ça ne changera pas grand chose puisque JPanel extends Container. Ce que je voulais dire au niveau de cet extends, c'est que tu ne te sers pas des méthodes qui existent déjà. Je pense en particulier au fait que les composants sont déjà stockés, et que tu peux les récupérer avec getComponents() par exemple, sans avoir à gérer des listes qui viennent alourdir le programme.
"de toute façon c'est du java donc pas le summum de la rapidité"
Beaucoup de gens pensent, que Java est lent donc ça ne sert à rien d'optimiser, car le programme sera toujours lent. Or c'est en n'optimisant pas que le programme devient lent. Un programme bien codé en Java sera meilleur qu'un programme mal codé en quelque autre langage...
Par exemple avec tes listes tu refais un traitement qui existe déjà, donc tu doubles inutilement ce traitement et le temps d'exécution, alors que tu pourrais totalement les supprimer...
Et je ne parle pas du fait que tu utilises des LinkedList alors qu'il serait plus rapide d'utiliser des ArrayList, car là on rentrerai vraiment dans de l'optimisation, et tu n'en es pas encore là !
30 juin 2012 à 15:30
je ne vois pas ce que tu veux dire par le fait que mes composants soient déjà stockés, est-ce que ça signigie que je peux utiliser getComponent(int n) pour récupérer le n ième composant ajouté ? Et je définis quel onglet est actif avec setComponentZOrder ?
En tout cas merci de m'aider jusque là, j'ai appris le java en cours, mais c'est seulement le 2e projet que je code, le premier étant une déchetterie totale de code, et le reste étant des exercices beaucoup trop courts, j'ai voulu faire un nouveau projet plus propre pour coder mieux. Mais étant donné qu'aucun prof ne nous dit ce qu'il faut faire ou ne pas faire, c'est pas facile de trouver tout seul...