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 :

Utilisation de Swing manuellement.


Sujet :

AWT/Swing Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 84
    Points : 232
    Points
    232
    Par défaut Utilisation de Swing manuellement.
    Bonjour,

    Je voudrais faire une interface graphique pour la certif SCJD sans outil (Je sais c con mais c du à la demande de la certif).
    Je voudrais utiliser le GridBagLayout mais je gallère trop.
    Je connais google est ton ami mais voila je suis plus habitué aux applications web

    Par exemple : http://muthaiah.tripod.com/Server-Configuration.html

    Quand je crée le gridBagLayout, je voudrais découper le tableau en 4 par 4 et placer les éléments où je veux pour avoir un formulaire comme en web

    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
     
    	public void displayWindow() {
    		GridBagLayout grid = new GridBagLayout();
    		GridBagConstraints constraints = new GridBagConstraints();
     
    		this.setLayout(new GridBagLayout());
     
    		constraints.gridheight = 4;
    		constraints.gridwidth = 4;
     
    		// Build the Data file location row
    		JLabel dbLocationLabel = new JLabel(DB_LOCATION_LABEL);
    		constraints.gridx = 1;
    		constraints.gridy = 1;
    		constraints.gridwidth=1;
    		constraints.gridheight=1;
     
    		grid.setConstraints(dbLocationLabel, constraints);
    		this.add(dbLocationLabel);
     
    		constraints.gridx = 2;
    		constraints.gridy = 1;
    		constraints.gridwidth=1;
    		constraints.gridheight=1;
     
     
    		JTextField locationField = new JTextField(25);
    		locationField.setToolTipText("Tool");
    		locationField.setName(DB_LOCATION_LABEL);
    		grid.setConstraints(locationField, constraints);
    		this.add(locationField);
     
    		constraints.gridx = 3;
    		constraints.gridy = 1;
    		constraints.gridwidth=2;
    		constraints.gridheight=1;
    		JButton browseButton = new JButton();
    		// browseButton.addActionListener(new BrowseForDatabase());
    		grid.setConstraints(browseButton, constraints);
    		this.add(browseButton);
     
    		JLabel serverPortLabel = new JLabel("Serveur port");
    		constraints.gridx = 1;
    		constraints.gridy = 2;
    		constraints.gridwidth = 1;
    		constraints.gridheight=1;
    		grid.setConstraints(serverPortLabel, constraints);
    		this.add(serverPortLabel);
     
    		JTextField portNumber = new JTextField(5);
    		portNumber.setToolTipText("Aide");
    		portNumber.setName("Serveur port");
    		constraints.gridx = 2;
    		constraints.gridy = 2;
    		constraints.gridwidth = 3;
    		constraints.gridheight=1;
    		grid.setConstraints(portNumber, constraints);
    		this.add(portNumber);
     
    		//Parametre par defaut fenetre
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLayout(grid);
     
    		//Centre la fenetre
    		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    		int x = (int) ((d.getWidth() - this.getWidth())/ 5);
    		int y = (int) ((d.getHeight() - this.getHeight())/ 5);
    		this.setLocation(x, y);
     
    		this.setSize(380, 450);
    		this.setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		Fenetre fenetre = new Fenetre();
    		fenetre.displayWindow();
    	}
    Enfin, si vous avez un très bon tutorial pour faire des formulaires avec GridBagLayout, je suis preneur.

    Merci beaucoup pour votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 84
    Points : 232
    Points
    232
    Par défaut
    En fait, je recherche un truc du genre

    <table>
    <colsgroup>
    <col avec la taille>
    <col avec la taille>
    </colsgroup>
    <tr>
    <td>Label : </td>
    <td>TextField</td>
    </tr>
    ....
    </table>

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Un tuto: http://bbclone.developpez.com/fr/jav...gridbaglayout/

    A noter qu'en swing et applis desktop en java plus généralement on évite de fixer des tailles aux composants. Les layout managers sont justement là pour les calculer automatiquement en fonction des contraintes et de l'espace disponible. Tout le but est de manier de façon correcte les contraintes du Layout. Cela permet d'avoir des applications qui se comportent relativement bien quelle que soit la résolution de l'utilisateur.

    TU peux par contre préciser le nombre minimal de caractères pour tes champs texte sans problèmes avec la méthode setColumns(int number)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Bonjour,

    j'était dans ton cas il y a quelque temps pour développer une application IHM. On m'avais parlé de GBL, et c'est vrai qu'au premier abort c'est un peu complexe, mais tellement efficace. Pour bien réaliser le découpage de ton panneau, je te conseil de "déssiner" ton appli a la main avec les colonnes et lignes avec les coordonnées de tes composants ( x,y + autres contraintes GBL ). Ainsi tu t'y retrouvera surment mieux et tu assimilera plus vite la notion du GBL. ( En parallèle de lire la doc et autre tutos bien entendu )

    L'utilisation de boucle ( for ) pour le placement des composants dit redondant ( ex: nombreux boutons ou labels ) est une bonne solution. ( C'est ici qu'on me l'avais conseillé )

    Bonne journée

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 84
    Points : 232
    Points
    232
    Par défaut
    Merci Sidok et pendoRa.
    J'ai utilisé le tutorial, ça aide mais c'est un peu complexe d'utiliser le GridBagLayout.
    Bon pour le SCJD, je vais faire un formulaire simple.

    1) Ma question est maintenant sur la partie controleur, je m'explique :

    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
     
     
    	/** Define form field **/
    	private JTextField locationField = new JTextField(25);
    	private JTextField magicNumber = new JTextField(5);
    	private JTextField serverName = new JTextField(10);
    	private JTextField portNumber = new JTextField(5);
     
            private JButton ok = new JButton("OK");
     
     
    	public void displayWindow() throws GuiTechnicalException {
                   //Initialise la fenetre ainsi que les boutons
                 ok.addActionListener(new SubmitFormListener (this));
    	     //Suite
            }
     
            class SubmitFormListener implements ActionListener {
     
            private transient ServerWindow frame;
     
            public SubmitFormListener(ServerWindow frame) {
                this.frame = frame;
            }
     
            public void actionPerformed(ActionEvent e) {
                    // Validation des donnees (Comme l'ActionForm dans struts1)
                 // Par exemple 
                 if ((this.frame.locationField.getText() == null)){
                      //Ouvre une popup d'erreur
                 }
     
     
                   //Creation d'un objet form
                 ServerParameterForm serverParamForm= new ServerParameterForm(....);
                 MyControleur cont = new MyControleur();
                 cont.saveServerParam(serverParamForm);
            }
          }
     
     
          public class MyControleur{
     
                 public void saveServerParam(final ServerParameterForm serverParam){
                     //Code
                 }
           }
    Est ce que cette manière de faire respecte le modèle MVC?
    Est ce que l'ActionListener est dans la partie vue ou controleur (J'ai du mal à voir).

    2) Je veux lier un service au controleur genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          public class MyControleur{
                 private IMyService service
     
                 public void saveServerParam(final ServerParameterForm serverParam){
                     //Code
                 }
           }
    J'aimerai respecter le multithreading, mais j'aimerai éviter de créer à chaque fois le service pour chaque appel du controleur. Comment faire?

    Je vous remercie.

Discussions similaires

  1. Logiciels connus utilisant AWT/Swing/SWT/JavaFX
    Par joplayer dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/11/2014, 02h39
  2. Utiliser la compilation manuelle de Qt
    Par Invité dans le forum Débuter
    Réponses: 6
    Dernier message: 23/04/2012, 13h14
  3. Utilisation javax.swing.ButtonGroup dans Visual Editor
    Par inch dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2005, 16h25
  4. [Débutant]Utilisation de swing
    Par OtI$ dans le forum Débuter
    Réponses: 10
    Dernier message: 01/12/2004, 21h27
  5. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 01h28

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