Problème d'affichage JButton

Résolu
Bonjour, j'ai décidé de faire le TP de la calculatrice en java, mon problème est que : les boutons sont initialisé par une boucle for, et son mis dans le bon JPanel :
for (String but : namNum){
i++;
butIni = new JButton(but);
if (i <= 12){
this.numButt.add(butIni); 
}else { 
this.othButt.add(butIni);
}

Et bah les JButtons de la boucle else et encore plus disparaissent totalement random, image :

celle est parfaite mais imaginez que le "*", jusqu'au ".", puisse partir d'un coup, bah c'est ce qui m'arrivent.
Merci de vos réponse

EDIT : Ah et au faite, quand j'enlève setRezisable sur ma JFrame, plus rien n'apparait en terme de JButton, sauf quand j'étire ma fenêtre

Skymer
"On à jamais rien, sans rien !"
"Ne jamais abandonnez"

4 réponses

  1. Modérateur
    Bonjour,

    Il va falloir ton code complet pour reproduire le bug, tes explications ne vont pas suffire...
    0
    1. Je te ferais ça demain, si j'y pense ?
      0
  2. bonjour, j'ai décidé de faire le TP de la calculatrice en java, mon problème est que : les boutons sont initialisé par une boucle for, et son mis dans le bon JPanel :


    Comment veux-tu que cela s'affiche ? Les boutons sont joliment rangees avec
    un algorithme simpliste.
    0
    1. Ils disparaissent, voilà le code source pour KX (juste celui de la classe qui étends JFrame :
      package fr.skymer.main;
      
      import java.awt.BorderLayout;
      import java.awt.Dimension;
      import java.awt.GridLayout;
      
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      
      public class Frame extends JFrame {
      	
      	private JPanel container = new JPanel();
      	private JButton butIni;
      	private JPanel numButt = new JPanel();
      	private JPanel othButt = new JPanel();
      	private JPanel pan = new JPanel();
      	private Panel panel = new Panel();
      	private int i;
      	private String namNum[] = {"1","2","3","4","5","6","7","8","9","0",".","=","C","+","-","/","*"};
      	
      	public Frame(){
      		//Fenêtre
      		this.setSize(300,400);
      		this.setVisible(true);
      		this.setResizable(false);
      		this.setLocationRelativeTo(null);
      		this.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
      		this.setTitle("Calculatrice");
      		//ContentPane et placement des objets entre eux-mêmes
      		this.setContentPane(container);
      		this.panel.setPreferredSize(new Dimension(300,50));
      		this.othButt.setPreferredSize(new Dimension(100,50));
      		this.getContentPane().setLayout(new BorderLayout());
      		this.getContentPane().add(panel, BorderLayout.NORTH);
      		this.getContentPane().add(pan, BorderLayout.CENTER);
      		this.pan.setLayout(new BorderLayout());
      		this.pan.add(numButt, BorderLayout.CENTER);
      		this.pan.add(othButt, BorderLayout.EAST);
      		//Initialisation des boutons
      		this.numButt.setLayout(new GridLayout(4,3,5,5));
      		this.othButt.setLayout(new GridLayout(5,2,5,5));
      		i = 0;
      		for (String but : namNum){
      			i++;
      			butIni = new JButton(but);
      			if (i <= 12){
      				this.numButt.add(butIni);
      			}else {
      				this.othButt.add(butIni);
      			}
      		}
      	}
      	
      }
      

      0
      1. Modérateur
        Soit je n'ai pas bien compris ton problème soit tout au lié au fait que ton setVisible(true) est appelé trop tôt, tu affiches ta fenêtre alors qu'elle n'est pas terminée, il faut mettre ça à la fin de la construction.
        0
      2. Ok je test ça demain
        0
    2. Donc pour reprendre ce que tu as dis, tu as raison il suffit de respecter un certains ordres et de déclarer logiquement, encore une fois on dois un fière chandelle à KX :3, bah merci, rectification : encore merci

      PS : pourquoi s'embêter comme ça, étrange ....

      Skymer
      "On à jamais rien, sans rien !"
      "Ne jamais abandonnez"
      0