["Résolu"]Interface graphique en JAVA

Alors, en suivant divers tutos pas toujours clairs sur le net, j’en suis arrivé à ca :

import javax.swing.*;
import java.awt.*;

class MyWindow extends JFrame{
    int ht, lg, x, y;
    String titre;
    private final static long serialVersionUID = 43L;
    JButton mybutton = new JButton("bouton");
    JButton mybutton2 = new JButton("bouton2");
    MyWindow(int h, int l, int abs, int ord, String title){
	super(title);
	this.ht = h;
	this.lg = l;
	this.x = abs;
	this.y = ord;
	this.titre = title;
	
	this.setSize(this.ht, this.lg);
	this.setLocation(this.x, this.y);
	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	
	Container cnt = this.getContentPane();
	cnt.setBackground(Color.RED);
	GridLayout myflow = new GridLayout(10, 10);
	cnt.setLayout(myflow);
	cnt.setSize(h,l);
	cnt.add(mybutton);
	cnt.add(mybutton2);
	cnt.setMinimumSize(new Dimension(h,l));
	this.setMinimumSize(new Dimension(h,l));
	this.setContentPane(cnt);
	this.pack();
	this.setVisible(true);
    }
}
class MyFrame{
    public static void main(String [] args){
	MyWindow mywin = new MyWindow(600, 400, 100, 200, "montitre");
    }
}

Pour afficher une fenêtre toute bête. Le problème est que les réglages de mon contentpane ne sont pris en compte que lors du pack … mais que le pack me benne mes contraintes de dimensions (genre les setMinimumSize(…)) qu’on peut voir trainer dans le code.
J’ai mis un GridLayout pour tester mais j’aurais pu en mettre un autre cela ne change rien.
Y aurait-il un grand gourou du JAVA pour m’éclairer (même un petit d’ailleurs :smiley: enfin quelqu’un qui a deja fait ca et pourrait me l’expliquer quoi parceque la je suis un peu perdu …)

Nota : tous les champs sont publics et oui 'est une négligence parceque j’avais la flemme de taper les “private” et de me fader les accesseurs ^^.

Chez moi c’est respecté.

Mais il est vrai que j’ai fais deux ou trois modifications :
J’ai mis la fonction main dans la classe MyWindow, j’ai enlevé tout les this (qui sont implicite et le setContentPane qui ne sert pas je crois.

Bon bah je vais tester ca alors =)

salut,
heu … tu peux nous faire un screen shoot de ton appli, et tu nous met en marge comment tu voudrais que “ceci” soit plutôt comme “celà”, parce que non seulement je comprend rien à ton code, mais en plus, rien à ton post … :confused:
Débutter en java, c’est commencer soit par un bouquin sérieux, une formation, ou developpez.com, où plein de gens pourront t’aider, c’est pas en glanant des bribes de codes sur le net.
thanks.
ps: en ce qui me concerne, j’ai fait un peu des trois, parce que pas longtemps, mais de façon intensive, et même si j’ai un peu perdu de mes modestes connaissances (parce que découverte de linux et du shell), je pense que c’était un bon début, vu que là en php avec les classes, je sens que je vais commencer à me balader. Parce que bon, php, c’est fourni mais c’est pas l’api java. L’api java, tu la vois dans son ensemble, mode vision globale *, c’est pas humain.

* Edit: voir apocalyptique au sens propre du terme.

alors : j’ai testé ta suggestion yoko et c’est pas mieux ><.
Et sinon usine : bah de bouquin sérieux j’en cherche toujours, idem pour les tutos ^^. Quant à une formation bah j’ai bien “interfaces graphiques” en master 1 mais j’aimerais autant savoir un peu de quoi on parle avant d’aller en cours ^^

Ah bon, ben tu as mal cherché, moi j’ai cherché pour toi, voilà quelques exemples parmis tant d’autres:
Programmation Java aux éditions Schaum’s, 2 ième édition.
Java in a nutschell chez O’Reilly
Les cahiers du programmeur Java chez Eyrolles …

pas accès a la biblio de mon ufr en ce moment … mais le nutshell question exemples … enfin en même temps j’étais sur la prog réseau quand j’ai tapé dedans.
Ceci dit : oui j’ai certainement mal cherché.

Bon … est ce que tu peux me réexpliquer (en français normal) ce que tu reproches à ton objet, comment tu voudrais qu’il soit et ce qui ne fonctionne pas stp ?
Ensuite, on tâchera de corriger ou au moins de faire un peu plus cohérent…

[quote=“usinagaz”]Ah bon, ben tu as mal cherché, moi j’ai cherché pour toi, (…)[/quote]Mon style doux et diplomate ferait il des émules ? :smt081

[quote=“usinagaz”]Bon … est ce que tu peux me réexpliquer (en français normal) ce que tu reproches à ton objet, comment tu voudrais qu’il soit et ce qui ne fonctionne pas stp ?
Ensuite, on tâchera de corriger ou au moins de faire un peu plus cohérent…[/quote]Yeah ! :smt066

:smiley: ton style m’est tout aussi naturel, d’où les tensions, parfois; mais je n’ai ni ta verve, ni ta culture, ni ta vivacité d’esprit , ni … ah ben non, j’ai fini le tube là, ya plus de pomade.

[quote=“usinagaz”]:smiley: ton style m’est tout aussi naturel, d’où les tensions, parfois; mais je n’ai ni ta verve, ni ta culture, ni ta vivacité d’esprit , ni … ah ben non, j’ai fini le tube là, ya plus de pomade.[/quote]Mouiii ! Ah ! C’est bon…
Je crois qu’avec le temps, on a tendance à se lacher non seulement plus facilement, mais avec d’autant plus de plaisir. On va finir aussi aigris que les gars de #debian-fr, AMA, il faut se surveiller.

Oui tu as raison :unamused:
Bon, où il est Hoshin ?! :smiley:

J’étais en train de m’autocongratuler d’avoir eu ma L3 … et surtout de dormir ! =)

Alors si je résume :

Je veux afficher une fenetre avec des contraintes de taille et de position(jusqu’ici tout va bien). Mais quand je tente d’utiliser un layout histoire de metre des boutons ou ce genre de choses : je perds mes contraintes de dimension de fenêtre (j’ai testé plusieurs layouts) i.e:La fenetre se réduit au pourtour de mes boutons si j’en mets. Apparament c’est le “pack()” qui fait sauter ces contraintes. Il intègre le layout avec tout le fourbi que je peux metre dedans, mais la fenetre se réduit au(x) bouton(s) ajoutés au layout au lieu de faire une taille fixe de X par Y pixels.

C’est plus clair la ? Ou c’est toujours aussi incompréhensible ? ^^

Ah oui, d’aprés ce que j’ai vu, déjà, si tu spécifies 10 lignes 10 colonnes dans le gridLayout, tu dois ajouter 10*10 composants , ou bien faut t’attendre à des effets indésirables …
As tu testé avec (2,3) comme valeurs ?

Je pense que ton gridLayout n’est pas forcément adapté à ce que tu veux faire … ou alors :
Utilises deux container par exemple, un pour tes boutons affublés d’un gridLayout (l.n) ou l est le nombre de lignes que tu veux, n le nombre de boutons par ligne,
un autre container que tu add aprés celui-ci, avec un setLayout(null). A tester …

Sinon, regardes cette modif et compares avec ta MyFrame :

[code]
import javax.swing.;
import java.awt.
;

class MyWindow extends JFrame{
String titre;
private final static long serialVersionUID = 43L;

MyWindow(int h, int l, int abs, int ord, String title){
super(title);
this.titre = title;
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Container P = this.getContentPane();
P.setLayout(null);
P.setBackground(Color.RED);
JButton b1 = new JButton(“one”);
JButton b2 = new JButton(“two”);
P.add(b1);
P.add(b2);

Insets insets = P.getInsets();
Dimension size = b1.getPreferredSize();
b1.setBounds(55 + insets.left, 5 + insets.top,
  size.width, size.height);
size = b2.getPreferredSize();
b2.setBounds(insets.left + 475, 5 + insets.top,
size.width, size.height);

Insets insetsf = this.getInsets();
this.setSize(600 + insetsf.left + insetsf.right,
 400 + insetsf.top + insetsf.bottom);

}

}
class MyFrame{
public static void main(String [] args){
MyWindow mywin = new MyWindow(600, 400, 100, 200, “montitre”);

mywin.setVisible(true);

}

}[/code]
ps: corriges par toi même en replaçant les variables h, l, ht, hl que j’avais supprimées …

je vais tenter ca ce soir.
Pour ce qui est de la grille bah j’ai fait ca histoire de tester voir mais je vais tenter le “2,3”

Le problème vient du fait que tu utilises pack() et setSize(). Il faut utiliser soit l’un, soit l’autre :

"The pack method sizes the frame so that all its contents are at or above their preferred sizes. An alternative to pack is to establish a frame’s size explicitly by calling setSize or setBounds (which also sets the frame’s location). In general, using pack is preferable to calling setSize, since pack leaves the frame’s layout manager in charge of the frame’s size, and layout managers are good at adjusting to platform dependencies and other factors that affect component size.
"
Trouvé sur http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html

Donc, en gros, il vaudrait mieux que je mette des “setPreferredSize(…)” la ou il faut et apres laisser “pack()” faire son boulot ? Yapukatenter ^^.
Merci beaucoup en tout cas.

Edit : apres test il semblerait qu’en fait j’ai posé, ) force de tenter des trucs, une contrainte stupide sur la taille de ma frame et que ca soit ca qui m’empéchait d’avoir un affichage correct.

le “setMinimumSize(new Dimension(h,l));” dans le constructeur de ma fenêtre provoquait ces problèmes d’affichage apparament.

Bon yapuka apprendre a utiliser les layouts maitnenant ^^

Merci encore pour votre aide.