IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Boucle pour creer une nouvelle fenetre


Sujet :

AWT/Swing Java

  1. #1
    Flooxe
    Invité(e)
    Par défaut Boucle pour creer une nouvelle fenetre
    Bonjour, vous m'avez énormement aider la semaine dernière et grâce a vous j'ai réussi a finir ce que mon maitre de stage me demandais mais finalement ça va plus et je doit tout refaire : ) vous imaginez mon bonheur

    Alors la semaine derniere j'ai créer la fenetre de l'image juste en dessous sauf que maintenant ces l'utilisateur qui doit créer cette fenêtre et la je sais pas comment m'y prendre.
    Nom : OneLaw.PNG
Affichages : 723
Taille : 32,5 Ko

    Je doit faire quelque chose comme ça, par exemple l'utilisateur choisi le nombre de "mass level", ensuite la valeur du "Mass", ensuite le nombre de "NormalForce" et sa valeur pour chaque "NormalForce" et ensuite le nombre de "SpeedandTest" et la ça me créer le premier bloc comme le bloc Mass2.5 et ainsi de suite l'utilisateur rentre les données et tout ce créer mais la je sais vraiment pas comment faire mon niveau n'es pas très élevé du coup si quelqu'un a une idée .

    Nom : Folder.PNG
Affichages : 553
Taille : 18,9 Ko

    Si mon code peux vous aidez.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
     
    public class Fenetre extends JFrame implements ActionListener {
     
    	private JPanel pan = new JPanel();
    	private JPanel pan1 = new JPanel();
    	private JPanel pan2 = new JPanel();
    	private JPanel pan3 = new JPanel();
    	private JPanel pan4 = new JPanel();
    	private JPanel pan5 = new JPanel();
    	private JPanel pan6 = new JPanel();
    	private JPanel pan7 = new JPanel();
    	private JPanel pan8 = new JPanel();
    	private JPanel pan9 = new JPanel();
    	private JPanel pan10 = new JPanel();
    	private JPanel pan11 = new JPanel();
    	private JPanel pan12 = new JPanel();
    	private JPanel pan13 = new JPanel();
     
    	private JButton bouton;	private JButton bouton2; private JButton bouton3; private JButton bouton4;
    	private JButton bouton5; private JButton bouton6; private JButton bouton7; private JButton bouton8;
    	private JButton bouton9; private JButton bouton10; JButton bouton11;
     
    	private JTextField jtx; private JTextField jtx2; private JTextField jtx3; private JTextField jtx4;
    	private JTextField jtx5; private JTextField jtx6; private JTextField jtx7; private JTextField jtx8; 
    	private JTextField jtx9;
     
    	private JLabel  label; private JLabel  label2; private JLabel  label3; private JLabel  label4;
    	private JLabel  label5; private JLabel  label6; private JLabel  label7; private JLabel  label8;
    	private JLabel label9;
     
    	private JComboBox<String> combo;
    	private JComboBox<String> combo2;
    	private File document;
     
    	//Fenetre pop up
    	private JOptionPane jop1;
    	private JLabel lab;
     
     
     
    	public Fenetre() throws IOException{
     
    		//Fenetre principal
    		setTitle("Logiciel");
    		setSize(400, 600);
    		setResizable(true);
    		setLocationRelativeTo(null);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
    		jop1 = new JOptionPane();
    		lab = new JLabel("Mass=");
     
    		pan.setLayout(new GridLayout(12,1));
     
     
    		bouton = new JButton("Folder Test");
    		bouton.addActionListener(new BoutonListener());	
     
    		bouton2 = new JButton("Nome Dati");
    		bouton2.addActionListener(new Bouton2Listener());
     
    		bouton3 = new JButton("NomeSpeedMinMax");
    		bouton3.addActionListener(new Bouton3Listener());
     
     
    		label = new JLabel("Col Speed Min Max");
    		jtx = new JTextField("_");
    		jtx.setPreferredSize(new Dimension(30, 20));
     
    		jtx2 = new JTextField("_");
    		jtx2.setPreferredSize(new Dimension(30, 20));
     
    		bouton4 = new JButton("Ok");
    		bouton4.addActionListener(new Bouton4Listener());
     
    		label2 = new JLabel("SpeedFricoCol");
    		jtx3 = new JTextField("_");
    		jtx3.setPreferredSize(new Dimension(30, 20));
     
    		jtx4 = new JTextField("_");
    		jtx4.setPreferredSize(new Dimension(30, 20));
     
    		bouton5 = new JButton("Ok");
    		bouton5.addActionListener(new Bouton5Listener());
     
    		label3 = new JLabel("Sampling");
    		combo = new JComboBox<String>();
    		combo.addItem("1");
    		combo.addItem("2");
     
    		bouton6 = new JButton("Ok");
    		bouton6.addActionListener(new Bouton6Listener());
     
    		bouton7 = new JButton("Export Data");
    		bouton7.addActionListener(new Bouton7Listener());	
     
    		label4 = new JLabel("Name Data");
    		jtx5 = new JTextField();
    		jtx5.setPreferredSize(new Dimension(30, 20));
     
     
    		label6= new JLabel("Number of Mass Level");
    		jtx6 = new JTextField();
    		jtx6.setPreferredSize(new Dimension(30, 20));
    		bouton10 = new JButton("Ok");
    		bouton10.addActionListener(new Bouton6Listener());
     
    		label7= new JLabel("Mass Level =");
    		jtx7 = new JTextField();
    		jtx7.setPreferredSize(new Dimension(30, 20));
    		bouton11 = new JButton("Ok");
    		bouton11.addActionListener(new Bouton6Listener());
     
    		label8= new JLabel("Number of Normal Force");
    		jtx8 = new JTextField();
    		jtx8.setPreferredSize(new Dimension(30, 20));
     
    		label9= new JLabel("Normal Force =");
    		jtx9 = new JTextField();
    		jtx9.setPreferredSize(new Dimension(30, 20));
     
     
     
    		label5 = new JLabel("Method");
    		bouton8 = new JButton("OneLaw");
    		bouton8.addActionListener(new Bouton8Listener());	
    		bouton9 = new JButton("MoreLaw");
    		bouton9.addActionListener(new Bouton9Listener());	
     
     
     
     
    		pan.add(pan1);
    		pan.add(pan2);
    		pan.add(pan3);
    		pan.add(pan4);
    		pan.add(pan5);
    		pan.add(pan6);
    		pan.add(pan7);
    		pan.add(pan8);
    		pan.add(pan9);
    		pan.add(pan10);
    		pan.add(pan11);
    		pan.add(pan12);
     
    		pan1.add(bouton);
    		pan2.add(bouton2);
    		pan3.add(bouton3);
    		pan4.add(label);
    		pan4.add(jtx);
    		pan4.add(jtx2);
    		pan4.add(bouton4);
    		pan5.add(label2);
    		pan5.add(jtx3);
    		pan5.add(jtx4);
    		pan5.add(bouton5);
    		pan6.add(label3);
    		pan6.add(combo);
    		pan6.add(bouton6);
    		pan7.add(bouton7);
    		pan8.add(label4);
    		pan8.add(jtx5);
    		pan9.add(label6);
    		pan9.add(jtx6);
    		pan9.add(bouton10);
    		pan10.add(label7);
    		pan10.add(jtx7);
    		pan11.add(label8);
    		pan11.add(jtx8);
    		pan13.add(label9);
    		pan13.add(jtx9);
     
     
     
    		pan12.add(label5);
    		pan12.add(bouton8);
    		pan12.add(bouton9);
     
     
    		setContentPane(pan);
    		setVisible(true);
    	/*	pan2.setVisible(false);
    		pan3.setVisible(false);
    		pan4.setVisible(false); 
    		pan5.setVisible(false);
    		pan6.setVisible(false);
    		pan7.setVisible(false);
    		pan8.setVisible(false);
    		pan9.setVisible(false); */ 
     
    	}
     
    	//Bouton Folder Test
    	class BoutonListener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {
    			//Permet d'aller chercher un dossier dans une fenetre explorer
    			JFileChooser choix = new JFileChooser();
    			choix.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    			int retour = choix.showOpenDialog(bouton);
     
    			if(retour == JFileChooser.APPROVE_OPTION)
    				choix.getSelectedFile();
    			String t =choix.getSelectedFile().getAbsolutePath();
     
    			try {
    				folderTest(t);
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    			pan2.setVisible(true);
    		}
     
    		public void folderTest (String name) throws IOException{
    			File fichier = new File("C:\\Users\\Flo\\workspace\\TrainDy\\monfichier.txt");
    			document=fichier;
    			FileWriter ffw = new FileWriter(fichier);
    			ffw.write("FolderTest='" + name + "'");
    			ffw.close();
     
    		}
    	}
    	//Bouton Nome Dati
    	class Bouton2Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e){
     
    			JFileChooser choix = new JFileChooser();
    			choix.setFileSelectionMode(JFileChooser.FILES_ONLY);
    			int retour = choix.showOpenDialog(bouton2);
     
    			if(retour == JFileChooser.APPROVE_OPTION)
    				choix.getSelectedFile();
    			String t =choix.getSelectedFile().getAbsolutePath();
    			try {
    				nomeDati(t,document);
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    			pan3.setVisible(true);
    		}
    		public void nomeDati (String name, File fichier) throws IOException{
    			BufferedWriter bufferedwriter = new BufferedWriter (new FileWriter (fichier, true));
    			String texte="Nome Dati='" + name + ",";
    			bufferedwriter.newLine();
    			bufferedwriter.write(texte);
    			bufferedwriter.close();
     
    		}
    	}
    	//Bouton Nome Speed MAx Min
    	class Bouton3Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e){
     
    			JFileChooser choix = new JFileChooser();
    			choix.setFileSelectionMode(JFileChooser.FILES_ONLY);
    			int retour = choix.showOpenDialog(bouton2);
     
    			if(retour == JFileChooser.APPROVE_OPTION)
    				choix.getSelectedFile();
    			String t =choix.getSelectedFile().getAbsolutePath();
    			try {
    				NomeSpeedMinMax(t,document);
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    			pan4.setVisible(true);
    		}
    		public void NomeSpeedMinMax (String name, File fichier) throws IOException{
    			BufferedWriter bufferedwriter = new BufferedWriter (new FileWriter (fichier, true));
    			String texte="NomeSpeedMinMax= " + name + ",";
    			bufferedwriter.newLine();
    			bufferedwriter.write(texte);
    			bufferedwriter.close();
     
    		}
    	}
     
    	class Bouton4Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {
    			String valeur = jtx.getText()+";"+jtx2.getText();
    			try {
    				ColSpeedMinMax (valeur, document) ;
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}	
    			pan5.setVisible(true);
    		}
     
    		public void ColSpeedMinMax (String name, File fichier) throws IOException{
     
     
    			try(BufferedWriter bufferedwriter = Files.newBufferedWriter(fichier.toPath(), StandardOpenOption.APPEND)) {
    				String texte = "ColSpeedMinMax= " + name; 
    				bufferedwriter.newLine();
    				bufferedwriter.write(texte);
     
    			}
    		}
    	}
     
    	class Bouton5Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {
    			String valeur = jtx3.getText()+";"+jtx4.getText();
    			try {
    				SpeedFricoCol (valeur, document) ;
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}	
    			pan6.setVisible(true);
    		}
     
    		public void SpeedFricoCol (String name, File fichier) throws IOException{
     
    			try(BufferedWriter bufferedwriter = Files.newBufferedWriter(fichier.toPath(), StandardOpenOption.APPEND)) {
    				String texte = "SpeedFricoCol : " + name; 
    				bufferedwriter.newLine();
    				bufferedwriter.write(texte);
     
    			}
     
    		}
    	}
     
     
    	class Bouton6Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {
    			String valeur = combo.getSelectedItem()+";";
    			try {
    				SamplingSpeedFromExperimentalData (valeur, document) ;
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}	
    			pan7.setVisible(true);
    		}
     
    		public void SamplingSpeedFromExperimentalData (String name, File fichier) throws IOException{
     
    			try(BufferedWriter bufferedwriter = Files.newBufferedWriter(fichier.toPath(), StandardOpenOption.APPEND)) {
    				String texte = "SamplingSpeedFromExperimentalData=" + name; 
    				bufferedwriter.newLine();
    				bufferedwriter.write(texte);
     
    			}
    		}
    	}
     
    	class Bouton7Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {
     
    			JFileChooser choix = new JFileChooser();
    			choix.setFileSelectionMode(JFileChooser.FILES_ONLY);
    			int retour = choix.showOpenDialog(bouton2);
     
    			if(retour == JFileChooser.APPROVE_OPTION)
    				choix.getSelectedFile();
    			String t =choix.getSelectedFile().getAbsolutePath();
    			try {
    				ExportData(t,document);
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    			pan8.setVisible(true);
    		}
    		public void ExportData (String name, File fichier) throws IOException{
    			BufferedWriter bufferedwriter = new BufferedWriter (new FileWriter (fichier, true));
    			String texte="Export Data= " + name;
    			bufferedwriter.newLine();
    			bufferedwriter.write(texte);
    			bufferedwriter.close();
     
    		}
    	}
    	class Bouton8Listener implements ActionListener{
     
     
    		public void actionPerformed(ActionEvent e) {
     
    			Fenetre2 fen2 = new Fenetre2();
    			fen2.setVisible(true);
     
    		}
    	}
     
    	public void actionPerformed(ActionEvent e) {
     
    	}
     
    }
    class Bouton9Listener implements ActionListener{
     
     
    	public void actionPerformed(ActionEvent e) {
     
    		Fenetre3 fen3 = new Fenetre3();
    		fen3.setVisible(true);
     
    	}
    	class Bouton10Listener implements ActionListener{
     
    		public void actionPerformed(ActionEvent e) {				
     
     
    		}
    	}
    }
    Pardon si mon message est pas très compréhensible : )

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    En gros, tu as besoin de créer non plus une interface avec un nombre fixe de tel ou tel composant, mais avec un nombre fixé dans une autre interface (formulaire). En fait, tu aurais dû dès le départ faire comme si. Au lieu de créer pleins de variables JButton, JPanel, JTexfField, tu aurais pu faire des tableaux et les initialiser dans des boucles.

    Au lieu de faire par exemple :
    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
    public class Exemple {
     
         private JTextField field1;
         private JTextField field2;
         private JTextField field3;
         ...;
         private JTextField field42;
     
         public Exemple() {
     
                 field1=new JTextField();
                 add(field1);
                 field2=new JTextField();
                 add(field2);
                 field3=new JTextField();
                 add(field3);
                 ...
     
         }
     
         public String getText1() {
                 return field1.getText();
         }
     
         public String getText2() {
                 return field2.getText();
         }
     
         public String getText3() {
                 return field3.getText();
         }
     
         ...
     
    }
    Tu peux faire :

    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
    public class Exemple {
     
         private JTextField[] fields;
     
         public Exemple(int nombreDeFields) {
     
                 fields = new JTextField[nombreDeFields];
                 for(int i=0; i<nombreDeFields; i++) {
                    JTextField field=new JTextField();
                    add(field);
                    fields[i]=field;
                 }
     
         }
     
         public String getText(int index) {
                 return fields[index].getText();
         }
     
    }
    Tout peut être géré selon ce principe.

    Tu peux générer des labels par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i=0; i<nombreDeFields; i++) {
          JLabel label = new JLabel("Champ "+ (i+1)+" :");
          JTextField field=new JTextField();
          add(label);
          add(field);
          label.setLabelFor(field);
          fields[i]=field;      
    }
    Le texte du label peut être généré par une fonction, ou provenir d'une liste, ou généré à partir d'un ResourceBundle, etc.

    Ensuite, il y a le problème du layout. Il faudra prendre un layout adapté à la génération par boucle. Un GridBagLayout est assez facile à manipuler pour ça.

    Pour certains aspects, en particulier en cas de grands nombres composants, il peut être intéressant de faire une interface "multi-panneau", à base de CardLayout ou de JTabbedPane).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Flooxe
    Invité(e)
    Par défaut
    Merci pour ta réponse j'étais entrain de tester une boucle while mais ça marche pas des masses je vais suivre tes conseils

  4. #4
    Flooxe
    Invité(e)
    Par défaut
    Pardon mais je ne comprend pas comment faire ta méthode avec bouton et un action listener.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah, je dirais "pareil". Précisemment, ça dépend de ce qu'on veut faire avec le bouton aussi.

    Par exemple, quelques cas (les possibilités sont infinies) :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    public class DemoPanel extends JPanel {
     
    	private final JTextField[] fields;
    	private final JButton[] buttonsPaste;
    	private final JButton[] buttonsShow;
     
    	private File lastDir;
    	private JButton clearAllButton;
     
     
    	public DemoPanel(int nbRows) {
    		super(new GridBagLayout());
    		fields = new JTextField[nbRows];
    		buttonsPaste = new JButton[nbRows];
    		buttonsShow = new JButton[nbRows];
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.insets=new Insets(2, 2, 2, 2); 
    		for(int i=0; i<nbRows; i++) {
    			gbc.gridy=i;
     
    			// label
    			JLabel label = new JLabel("Champ " + (i+1) + " : ");
    			gbc.gridx=0;
    			gbc.anchor=GridBagConstraints.EAST;
    			gbc.fill=GridBagConstraints.NONE;
    			gbc.weightx=0;
    			add(label, gbc);
     
    			// field
    			JTextField field = new JTextField();
    			label.setLabelFor(field);
    			gbc.gridx=1;
    			gbc.anchor=GridBagConstraints.CENTER;
    			gbc.fill=GridBagConstraints.HORIZONTAL;
    			gbc.weightx=1;
    			add(field, gbc);
    			fields[i]=field;
     
    			// button1
    			JButton buttonPaste = new JButton("Paste");
    			gbc.gridx=2;
    			gbc.anchor=GridBagConstraints.CENTER;
    			gbc.fill=GridBagConstraints.NONE;
    			gbc.weightx=0;
    			add(buttonPaste, gbc);
    			buttonPaste.addActionListener(e-> pasteTo(field));
    			buttonsPaste[i]=buttonPaste;
     
    			// button2
    			JButton buttonShow = new JButton("Show");
    			gbc.gridx=3;
    			gbc.anchor=GridBagConstraints.CENTER;
    			gbc.fill=GridBagConstraints.NONE;
    			gbc.weightx=0;
    			add(buttonShow, gbc);
    			int index=i;
    			buttonShow.addActionListener(e-> showImage(index));
    			buttonShow.setEnabled(false);
    			buttonsShow[i]=buttonShow;
     
    			//
    			field.getDocument().addDocumentListener(new DocumentListener() {
     
    				@Override
    				public void removeUpdate(DocumentEvent e) {
    					 changedUpdate(e);
    				}
     
    				@Override
    				public void insertUpdate(DocumentEvent e) {
    					 changedUpdate(e);
    				}
     
    				@Override
    				public void changedUpdate(DocumentEvent e) {
    					 buttonShow.setEnabled(!field.getText().trim().isEmpty());
    					 boolean enabled = false ;
    					 for(JTextField field : fields) {
    						 if ( !field.getText().isEmpty() ) { 
    							 enabled = true;
    							 break;
    						 }
    					 }
    					 clearAllButton.setEnabled(enabled);
    				}
    			});
     
    		}
     
    		clearAllButton = new JButton("Clear all fields");
    		gbc.gridx=2;
    		gbc.gridy=-1;
    		gbc.gridwidth=2;
    		gbc.anchor=GridBagConstraints.CENTER;
    		gbc.fill=GridBagConstraints.HORIZONTAL;
    		gbc.weightx=0;
    		add(clearAllButton, gbc);
    		clearAllButton.addActionListener(e->clearAllFields());
    		clearAllButton.setEnabled(false);
     
    	}
     
    	private void clearAllFields() {
    		for(JTextField field : fields) {
    			field.setText("");
    		}
    	}
     
    	private void showImage(int index) {
    		JTextField field = fields[index];
    		String text = field.getText();
    		if ( !text.trim().isEmpty() ) {
    			File file = new File(text);
    			if ( file.exists() ) {
    				try {
    					BufferedImage image = ImageIO.read(file);
    					int width = image.getWidth();
    					int height = image.getHeight();
    					Image fimage;
    					float scale = -1;
    					if ( width>300 || height>300 ) {
    						scale = 300f/Math.max(width, height);
    						fimage = image.getScaledInstance((int)(width*scale), (int)(height*scale), Image.SCALE_SMOOTH);
    					}
    					else {
    						fimage = image;
    					}
    					JPanel imagePanel = new JPanel(new BorderLayout());
    					JLabel imageLabel = new JLabel(new ImageIcon(fimage));
    					imagePanel.add(imageLabel, BorderLayout.NORTH);
     
    					Map<String, String> prop = new LinkedHashMap<>();
    					prop.put("Largeur×Hauteur, en pixels : ", width + " × " + height );
    					prop.put("Fichier : ", file.getName());
    					prop.put("Emplacement : ", file.getParentFile().getAbsolutePath().toString() );
    					prop.put("Taille fichier, en octets : ", String.valueOf(file.length()) );
    					if ( scale>0 ) {
    						prop.put("Echelle d'affichage : ", NumberFormat.getPercentInstance().format(scale) );
    					}
     
    					JTable proptable = new JTable(new AbstractTableModel() {
     
    						@Override
    						public Object getValueAt(int row, int col) {
    							for(Map.Entry<String, String> entry : prop.entrySet() ) {
    								if ( row==0 ) {
    									if ( col==1 ) {
    										return entry.getValue();
    									}
    									else {
    										return entry.getKey();
    									}
    								}
    								row--;
    							}
    							return null;
    						}
     
    						@Override
    						public Class<?> getColumnClass(int col) {
    							return String.class;
    						}
     
    						@Override
    						public String getColumnName(int col) {
    							if ( col==1 ) {
    								return "Valeur";
    							}
    							else {
    								return "Nom";
    							}
    						}
     
    						@Override
    						public int getRowCount() {
    							return prop.size();
    						}
     
    						@Override
    						public int getColumnCount() {
    							return 2;
    						}
     
    					});
    					JScrollPane scrollPane = new JScrollPane(proptable);
    					proptable.setFillsViewportHeight(true);
    					proptable.setPreferredScrollableViewportSize(new Dimension(500,75)); 
    					imagePanel.add(scrollPane, BorderLayout.CENTER);
     
     
     
     
    					JOptionPane.showMessageDialog(this, imagePanel, "Image " + (index+1), JOptionPane.INFORMATION_MESSAGE);
    				} catch (IOException e) {
    					JOptionPane.showMessageDialog(this, "Impossible de visualiser l'image.\n\nFormat non supporté ou erreur de lecture.", "Erreur", JOptionPane.ERROR_MESSAGE);
    				}
    			}
    			else {
    				JOptionPane.showMessageDialog(this, "Impossible de visualiser l'image.\n\nFichier " + file.getName() + " non trouvé.\n\nChemin complet : " + file.getAbsolutePath(), "Erreur", JOptionPane.ERROR_MESSAGE);
    			}
    		}
    	} 
     
    	private void pasteTo(JTextField field) {
    		JFileChooser chooser = new JFileChooser(lastDir);
    		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		chooser.setMultiSelectionEnabled(false);
    		chooser.setFileFilter(new FileFilter() {
     
    			@Override
    			public boolean accept(File f) {
    				return f.isDirectory() || isImageExtension(f.getName());
    			}
     
    			@Override
    			public String getDescription() {
    				return "Fichier image";
    			}
     
    		});
    		chooser.setDialogTitle("Choisir une image");
    		if ( chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION ) {
    			File selected = chooser.getSelectedFile();
    			if ( selected.exists() && isImageExtension(selected.getName()) ) {
    				field.setText(selected.toString());
    			}
    			lastDir = selected.getParentFile();
    		}
    	}
     
    	private boolean isImageExtension(String name) {
    		return MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(name).startsWith("image/");
    	}
     
     
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.add(new DemoPanel(10));
     
    		frame.setSize(640, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Flooxe
    Invité(e)
    Par défaut
    Merci c'est gentil de m'aider mais mon cerveau bloque sur le fait que ce soit l’utilisateur qui créer la fenêtre. Je ne vois pas comment la fenêtre va se créer en fonction de ce qu'il rentre. Chaque bouton doit récupérer la valeur de ce qu'a rentrer l'utilisateur jusqu’au au dernier textfields et ensuite la fenêtre se créer ? Désolée je suis débutant en java je n'ai eu que 2 mois de cours en octobre et novembre alors ça remonte

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Peu importe d'où viennent les paramètres. Qu'ils soient saisis dans un formulaire, lus dans un fichier de configuration, une base de données, fixés dans des constantes, ou générés aléatoirement, ce sont des paramètres. Sépare les problématiques et gère les de manière séparée. Tu sais faire un formulaire pour saisir des paramètres n'est-ce pas ? Ensuite tu collectes ces paramètres dans le formulaire et tu vas t'en servir pour créer le formulaire final.

    Dans mon exemple, j'ai réduit les paramètres à un cas simple : un nombre de lignes dans mon interface. Le nbRows de public DemoPanel(int nbRows) {. Donc j'ai juste à faire une boucle : toutes mes lignes ont la même structure.
    Mais tu peux passer ce que tu veux. Une liste d'instance de classe Parametre, qui a des attributs, genre type de champ, nom de champ, type de valeur, listes des actions (ce que va ou vont faire le ou les boutons associé)... Ce qui te permet d'avoir des sous-parties de formulaire différentes, certaines avec bouton, d'autres sans, certaines avec champs, d'autres sans, peu importe. Je ne sais pas exactement quelles sont les specifications de ton application, donc difficile de te donner des exemples dans ton contexte. Mais c'est l'idée générale. C'est même globalement l'idée générale de n'importe quel programme : des entrées, variables, des sorties variables qui dépendent des variables d'entrées.
    Faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( n==0 ) {
           System.out.println("Quoi ?");
    } 
    else if ( n>0 {
                System.out.println("Bonjour");
    }
    else {
                System.out.println("Au revoir");
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( n==0 ) {
           add( new JButton("Plop") );
    } 
    else if ( n>0 {
           add( new JLabel("Plip") );
           add( new JTextField() );
    }
    else {
           String[] array={"pim","pam","poum"};
           add( new JComboBox<String>(array ) );
    }
    c'est pareil conceptuellement : un paramètre en entrée, un comportement en fonction du paramètre en sortie
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Flooxe
    Invité(e)
    Par défaut
    Ok merci ^^ en faite j'essaie de faire l'interface dans la photo 1 mais du coup l'utilisateur choisie combien il y a de normal force de speed and test de mass et la valeur de tout ça va s'écrire dans un fichier texte

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Là tu me parles du formulaire final n'est-ce pas ? Une photo n'est une spécificiation : tout ce que je vois c'est

    • qu'il y a N=2 zones
    • découpées en M=3 zones
    • découpées en A=2 lignes (de même libellés)
    • découpées en B=2 champs

    Déjà il faut que j'interprète si c'est 2 fois 2 champs, ou 4 champs. Ensuite, il faut que je devine ce qui est censé être variable là-dedans. N, M, A, B ? Ce qui est saisie explicitement par l'utilisateur, ou généré automatiquement à partir des choix de l'utilisateur. Par exemple, si M est variable, c'est à dire que l'utilisateur va saisir s'il en veut 1, 3 ou 42, le libellé "NormalForce=20", c'est un texte libre, c'est "NormalForce=" suvi d'un nombre choisi par l'utilisateur, librement, ou dépendant de quelque chose,calculable, ou venant d'une table. Ou peut être que l'utilisateur choisit dans une liste de choix fixe, et que ce choix va déterminer si M vaut 0, 2, ou 27, et des libellés fixes suivent.
    Par exemple, si on devait faire un formulaire qui permet de saisir des informations qui permettent de générer un formulaire qui permet de paramétrer des horaires de liaisons entre villes par avion. On pourrait dire :
    1. l'utilisateur peut désigner librement des couples de villes, ville de départ, ville d'arrivée, en saisissant en toutes lettres des noms de villes
    2. l'utilisateur peut désigner des couples de villes, départ et arrivée. Les villes de départ sont dans une liste de villes fixée, et les villes d'arrivée dans une autre liste de villes fixées
    3. l'utilisateur peut désigner des couples de villes, départ et arrivée. Les villes de départ sont dans une liste de villes fixées, et les villes d'arrivée dans une autre liste de villes qui dépendent de la ville de départ
    4. l'utilisateur peut désigner des trajets dans une liste de trajets fixés, caractérisés par une ville de départ et d'arrivée
    5. l'utilisateur peut désigner au plus 5 trajets dans une liste de trajets
    6. l'utilisateur peut désigner au plus 3 lots (caractérises par un nom de marque) de x trajets, sachant que le total des x ne doit pas dépasser 7
    7. etc.

    Forcément, en fonction du cas, la saisie change, et la génération change.

    Mais peu importe à la limite, le PRINCIPE RESTE LE MÊME. Simplement, concrêtement, je ne peux pas te donner autre chose que des règles de principes et des exemples génériques bidons. Donc soit tu fais l'abstraction de ton problème (avant de programmer en Java, en C, ou en dada ourka, c'est l'essentiel, le codage étant accessoire pour moi), soit tu me donnes des specifications et je pourrais te donner des exemples plus spécifiques.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Flooxe
    Invité(e)
    Par défaut
    Ah pardon je ne suis pas assez clair quand je m'exprime, en faite l'utilisateur choisi le nombre de bloc Mass puis la valeur du premier Mass ce qui créer un premier bloc qui contient 1 ou plusieurs normal Force
    ensuite l'utilisateur choisie combien il veux de normal force et la valeur du Normal Force et dans chaque NormalForce il y a 1 ou plusieurs SpeedandTest qui est toujours égale a 120 lui et ensuite il faut faire la même chose pour le bloc numéro deux si il y en a un.
    Mass = ?
    combien de normal Force ?
    quel valeur le premier normal Force ?
    combien de speed and test dans ce normal Force ?
    Normal Force 2 quel valeur ?
    Combien de speed and test

    Voila ^^
    Je ne pense pas avoir la bonne logique parce que ça ne doit pas être si compliqué a faire mais je bloque dessus depuis hier

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ok, donc si je comprends bien, même le premier formulaire est lui-même dynamique ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Flooxe
    Invité(e)
    Par défaut
    Le premier formulaire est dynamique oui^^ de folder test a name data l'utilisateur rentre des chose ou va chercher des dossier via un JfileChooser et je me suis dit pourquoi pas lui faire créer la fenêtre juste après dans le même formulaire via des JTextField mais ce n'est pas la bonne méthode du coup

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On peut procéder de différentes manières.

    1. Une fenêtre unique : un bouton ajouter "mass", qui fait apparaitre un panel pour saisir les infos
    2. Une table auto croissante : on a toujours une ligne vide en bas qui sert à créer un nouveau
    3. Un formulaire multipage : une première page avec un champ avec le nombre de masse, puis autant de page pour chaque mass...


    La troisième solution est plus facile à implémenter. Elle est souvent plus claire à utiliser pour un end-user( c'est ce que font les formulaires d'installation traditionnellement), mais peux devenir fastidieuses s'il y a beaucoups de "mass" à saisir.
    La deuxième probablement la plus compliquée (la JTable c'est un peu capricieux, quoiqu'on peut le faire sans JTable, mais plus long).

    En revanche, je n'aurais que peu de temps d'ici ce week-end pour poursuivre cette discussion. Déjà cet après-midi, réunion, et, en plus,j'ai un truc qui vient de s'ajouter à ma pile.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Flooxe
    Invité(e)
    Par défaut
    pas de problème c'est déjà super sympa de me répondre je vais essayer un formulaire multi page .
    Bon courage pour la réunion

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/06/2007, 18h10
  2. outputLink pour ouvrir une nouvelle fenetre
    Par Alec6 dans le forum JSF
    Réponses: 1
    Dernier message: 10/01/2007, 14h54
  3. Comment créer une nouvelle fenetre pour recherche
    Par RaimS dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2006, 16h02
  4. creer une nouvelle fenetre dans un fork
    Par christo_lr dans le forum POSIX
    Réponses: 2
    Dernier message: 24/04/2006, 14h13
  5. Creer une nouvelle référence pour le driver ODBC
    Par tripper.dim dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 04/01/2005, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo