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 :

[Swing] Look&Feel et petits détails


Sujet :

AWT/Swing Java

  1. #1
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut [Swing] Look&Feel et petits détails
    Bonjour à tous,

    j'ai mis en fichier joint un screenshot de l'interface d'un de mes programmes.
    J'aimerai régler quelques petits défauts swing qui y apparaissent mais je bloque pour les points suivants, si vous pouviez me donner une piste:

    - Le texte dans mes onglets n'est pas centré horizontalement
    - Même chose dans la MenuBar et dans les boutons...
    - Il y a une bordure autour de mes tabPane alors que je l'ai techniquement enlevée...

    J'ai évidemment cherché à modifier le look&feel mais je veux absolument garder le Metal ^^

    voilà si vous avez des tuyaux
    Images attachées Images attachées  
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut;

    Post ton code.

  3. #3
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    ok mais c'est un peu le fouilli, du swing quoi, on va commencer par la menubar:

    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
     
     public void setMenu(JPanel pan3, ActionListener exitListener, ActionListener aboutListener, ActionListener addUserListener, ActionListener delUserListener,
    ActionListener prefListener, ActionListener helpListener, ActionListener modifUserListener){
     
            JMenu fileMenu,aboutMenu,userMenu,prefMenu;
     
            menu = new JMenuBar();
            menu.setBounds(0,0,frame.getWidth(),20);
            menu.setVisible(true);
     
            fileMenu = new JMenu("PFIL");
            fileMenu.setFont(Font.decode("Arial 10px"));
            fileMenu.setBounds(0, 4, 50, 15);
     
            aboutMenu = new JMenu("About");
            aboutMenu.setFont(Font.decode("Arial 10px"));
            aboutMenu.setBounds(50, 4, 50, 15);
     
            userMenu = new JMenu("Utilisateurs");
            userMenu.setFont(Font.decode("Arial 10px"));
            userMenu.setBounds(100, 4, 50, 15);
     
            prefMenu = new JMenu("Preferences");
            prefMenu.setFont(Font.decode("Arial 10px"));
            prefMenu.setBounds(150,4,50,15);
     
     
            JMenuItem p  = new JMenuItem("Preferences");
            p.setFont(Font.decode("Arial 10px"));
            p.addActionListener(prefListener);
     
            JMenuItem m = new JMenuItem("Quitter");
            m.setFont(Font.decode("Arial 10px")); 
            m.addActionListener(exitListener);
     
            JMenuItem a = new JMenuItem("About");
            a.setFont(Font.decode("Arial 10px"));        
            a.addActionListener(aboutListener);
     
            JMenuItem h = new JMenuItem("Help");
            h.setFont(Font.decode("Arial 10px"));
            h.addActionListener(helpListener);
     
            JMenuItem addU = new JMenuItem("Ajouter un utilisateur");
            addU.setFont(Font.decode("Arial 10px"));
            addU.addActionListener(addUserListener);
     
            JMenuItem modifU = new JMenuItem("Modifier un utilisateur");
            modifU.setFont(Font.decode("Arial 10px"));
            modifU.addActionListener(modifUserListener);
     
            JMenuItem delU = new JMenuItem("Supprimer un utilisateur");
            delU.setFont(Font.decode("Arial 10px"));
            delU.addActionListener(delUserListener);        
     
            fileMenu.add(m);;
            aboutMenu.add(a);
            aboutMenu.add(h);
            userMenu.add(addU);
            userMenu.add(modifU);
            userMenu.add(delU);
            prefMenu.add(p);
            menu.add(fileMenu);
            menu.add(userMenu);
            menu.add(prefMenu);
            menu.add(aboutMenu);
     
            pan3.add(menu);
        }
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par Tux++ Voir le message
    ok mais c'est un peu le fouilli, du swing quoi
    Swing n'est pas fouilli, c'est une magnifique librairie !

    Il est inutile d'utiliser setVisible sur les menu. setBounds est de trop (ton problème vient de la, la JMenuBar gérera les items toute seule). Et le menu s'ajoute à ta fenêtre avec la méthode setJMenuBar, ce sera mieux qu'a un panel.

    Aussi, tu peut créer un seul objet Font que tu donne à tout tes items.

    Sans utiliser setBounds, tout va mieux. Pour que les choses soit davantage compréhensible, l'oraganisation de ton code est bénéfique.

    Voici ce que pourrait être un tel code :
    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
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    public class TestMenu extends JFrame {
     
    	public static void main(String[] args) {
    		TestMenu frame = new TestMenu();
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    	public TestMenu() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		JPanel panel = (JPanel) getContentPane();
    		panel.setPreferredSize(new Dimension(300, 300));
    		setJMenuBar(new MonMenu());
    	}
     
    	public class MonMenu extends JMenuBar {
     
    		private final Font font = Font.decode("Arial 10px");
     
    		public MonMenu() {
    			JMenu fileMenu = new JMenu("PFIL");
    			fileMenu.setFont(this.font);
     
    			JMenu aboutMenu = new JMenu("About");
    			aboutMenu.setFont(this.font);
     
    			JMenu userMenu = new JMenu("Utilisateurs");
    			userMenu.setFont(this.font);
     
    			JMenu prefMenu = new JMenu("Preferences");
    			prefMenu.setFont(this.font);
     
    			JMenuItem preferences = new JMenuItem("Preferences");
    			preferences.setFont(this.font);
     
    			JMenuItem quitter = new JMenuItem("Quitter");
    			quitter.setFont(this.font);
    			quitter.addActionListener(new QuitterListener());
     
    			JMenuItem about = new JMenuItem("About");
    			about.setFont(this.font);
     
    			JMenuItem help = new JMenuItem("Help");
    			help.setFont(this.font);
     
    			JMenuItem addUser = new JMenuItem("Ajouter un utilisateur");
    			addUser.setFont(this.font);
     
    			JMenuItem modifUser = new JMenuItem("Modifier un utilisateur");
    			modifUser.setFont(this.font);
     
    			JMenuItem delUser = new JMenuItem("Supprimer un utilisateur");
    			delUser.setFont(this.font);
     
    			fileMenu.add(quitter);
    			aboutMenu.add(about);
    			aboutMenu.add(help);
    			userMenu.add(addUser);
    			userMenu.add(modifUser);
    			userMenu.add(delUser);
    			prefMenu.add(preferences);
     
    			add(fileMenu);
    			add(userMenu);
    			add(prefMenu);
    			add(aboutMenu);
    		}
     
    	}
     
    	public class QuitterListener implements ActionListener {
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			System.exit(0);
    		}
     
    	}
     
    }
    J'ai mis un listener sur Quitter.

  5. #5
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    Swing n'est pas fouilli, c'est une magnifique librairie !
    Ce n'est pas dans ce sens que je parlais, du code Swing devient vite lourd à lire C'est pour cela que je n'ai posté que mon menu

    Merci pour les infos je vais utiliser setMenuBar();
    Pour les fontes, c'est vrai que c'est beaucoup plus propre, disons que je n'ai pas encore cherché vraiment à repasser sur mon code Swing pour l'améliorer.
    Par contre je ne suis vraiment pas pour étendre JFrame, mais ce n'est qu'un détail

    merci
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  6. #6
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par Tux++ Voir le message
    du code Swing devient vite lourd à lire
    Il y a parfois une succession d'appels qui peuvent donner cette impression de lourdeur, oui.

  7. #7
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    pour alléger ton code tu pourrais faire :

    UIManager.put("Menu.font",this.font);
    UIManager.put("MenuItem.font",this.font);
    UIManager.put("MenuBar.font",this.font);

    de fait plus besoin de nommer chaque item

    tu fait directement menubar.add(new JMenu("Option ")) ...

  8. #8
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    oui en effet

    ce sont tous de bons conseils, je dois dire quand je lis mon code swing par rapport au reste auquel j'attache beaucoup d'importance, je me dis, bon il est temps de la rendre plus propre et plus efficace

    mais bon c'est ce que je garde toujours pour la fin, travaillant en MVC ^^

    bref merci
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Swing - Look and Feel - Office 2010
    Par mortimer.pw dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 09/10/2011, 17h47
  2. [Swing] [Look and Feel] Background métal et non système
    Par SpecialCharacter dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 11/02/2008, 16h05
  3. Swing: look & feel...
    Par menuge dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/04/2006, 16h12
  4. Look and Feel SWING...
    Par menuge dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/03/2006, 17h18

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