Y a-t-il un moyen de rendre la méthode initComponents() créé automatiquement par NetBeans protected ?
Merci par avance...![]()
Y a-t-il un moyen de rendre la méthode initComponents() créé automatiquement par NetBeans protected ?
Merci par avance...![]()
Pour quoi faire ?
Car si c'est pour pouvoir faire une sous-classe et étendre la méthode initComponent, je pense pas que ce soit une bonne idée.
Vincent
En fait j'avais l'idée de faire une classe mère extends JDialog pour toutes mes fenêtres de type JDialog.
Et je voulais centraliser les fonctions récurrentes dans cette classe mère, c'est à dire: centrage des fenetres....
Le problème, c'est que pour utiliser ma ligne de code qui centre le fenêtre, il faut d'abord que j'ai fait le initComponant dans les constructeurs des classe filles (cette ligne de code utilise la taille de la fenêtre, qui n'est définie qu'après initCoponant).
Donc j'ai pensé à faire une méthode initComponant abstraite dans ma classe mère qui serait implémenté dans chaque fenêtre fille. Mais je ne peut évidament pas faire une méthode abstraite private, seulement protected.
Voici un exemple du code que je voudrais implémenter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public abstract class fenetreMere extends javax.swing.JDialog { //Constructeur public fenetreMere(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); //Centrage de la fenêtre quelle que soit la résolution de l'écran setLocation(Math.max(0,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().width-this.getSize().width)/2),Math.max(0,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().height-this.getSize().height)/2)); } protected abstract void initComponents(); } //un exemple de fenêtre fille public class OuvrirPoint extends fenetreMere { //Constructeur public OuvrirPoint(java.awt.Frame parent, boolean modal) { super(parent, modal); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code "> protected void initComponents() { .... //code généré par Netbeans ... } }
Regarde un peu plus bas dans le forum, tu trouveras un sujet qui traite de la dérivation de form , sans que ca marche pour le moment.
Mais comme l'a dit vbrabant, la surcharge de la méthode initComponent n'est pas une bonne idée, et cela n'est tout simplement pas possible : ecrase le layout parent !
Dans ton cas, vu que c'est plutot des méthodes appliqués a tes fenetres, tu peux peut être faire une classe outils avec des méthodes statiques, dans la cas du centrage la méthode statique recoit la référence de ta fenetre en entrée.
Merci pour ta réponse N©O.
Il y a juste un point que j'ai pas trop compris: si je crée ma classe outil avec une méthode qui centre la fenêtre que je lui fait passer en paramètre, je serait quand même obligé d'appeler cette méthode dans chacune de mes fenêtres, non?
Du coup, si j'ai bien compris ce que tu m'as dit, j'y gagne pas vraiment...
Je sais pas si c'est possible avec un autre méthode, mais je voulais faire en sorte que chacune de mes fenêtre utilisent la même partie de code (centrage, .pack()...) à leur construction, sans avoir à copier le code dans chacune d'elle.
Si jamais il y a une solution, je suis preneur... sinon, tant pis pour moi!
Merci de m'aider en tout cas...
Sauf que les méthodes (voir la méthode) est écrite qu'une fois, donc t'y gagnes tout de même un peu.Envoyé par ZeBidule
Apres c'est une solution comm ca qui m'est passé par la tête, y a surement mieux![]()
Partager