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

 Java Discussion :

personnaliser la boite de confirmation :showConfirmDialog


Sujet :

Java

  1. #1
    Membre régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut personnaliser la boite de confirmation :showConfirmDialog
    salut,
    je voudrais personnaliser la boite de confirmation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     int option = JOptionPane.showConfirmDialog(null, question, title,
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null );
    comme ce style suivant:
    Nom : conf.png
Affichages : 351
Taille : 34,8 Ko
    y'a t'il une idée???
    merci d'avance.

  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,

    Tu peux complètement faire l'équivalent de JOptionPane à partir de la classe JDialog (JOptionPane est basée sur JDialog), ce qui te permettra de gérer les styles comme tu veux. Pour supprimer les décorations de la fenêtre, utiliser setUndecorated. Il faut évidemment réadapter toutes les décorations de boutons, adapter les styles de texte, polices, couleurs (pour le message, le plus simple de passer par du html/JTextPane), réadapter la gestion du clavier, supprimer la gestion du focus, gérer les marges par des borders, éventuellement réadapter l'UI du bouton, etc.

    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
    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
    import java.awt.BasicStroke;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Graphics2D;
    import java.awt.GridBagLayout;
    import java.awt.KeyEventDispatcher;
    import java.awt.KeyboardFocusManager;
    import java.awt.Polygon;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.image.BufferedImage;
     
    import javax.swing.BorderFactory;
    import javax.swing.DefaultFocusManager;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextPane;
     
    public class CustomDialog extends JDialog {
     
    	private static final long serialVersionUID = 1L;
     
    	private static final String FONT = "Courier New"; 
    	private static final Font FONTBUTTON = new Font(FONT,Font.PLAIN,27);
    	private static final Color COLORTEXT = Color.WHITE;
    	private static final Color COLORBACKGROUND = new Color(255,0,0);
    	private static final Color COLORBUTTON = new Color(240,0,0);
    	private static final Color COLORBUTTONBORDER = new Color(250,0,0);
    	private static final Color COLORICON = Color.BLACK;
    	private static final int MARGINBUTTON = 10;
    	private static final int MARGINDIALOG = 10;
     
    	private static final Icon FLOPPY_DISK_ICON = createFloppyDiskIcon();
     
     
    	private boolean ok;
    	private JButton buttonValider;
    	private JButton buttonAnnuler;
    	private CustomDialog(Frame owner) {
    		super(owner, true);
    		setUndecorated(true); // pour enlever les décorations
    		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		JPanel panel = new JPanel(new BorderLayout());
    		panel.setBorder(BorderFactory.createEmptyBorder(MARGINDIALOG,MARGINDIALOG,MARGINDIALOG,MARGINDIALOG));
    		panel.setBackground(COLORBACKGROUND);
    		JTextPane messagePane = new JTextPane();
    		messagePane.setContentType("text/html");
    		messagePane.setFont(getFont());
    		messagePane.setEditable(false);
    		messagePane.setText("<html><font face='"+FONT+"' color='white'><b><center><font size='37'>VOULEZ-VOUS FAIRE L'ENREGISTREMENT ?</font></center><center>Enter: VALIDER --- Escape: ANNULER</center></b></font>");
    		messagePane.setOpaque(false);
    		messagePane.setForeground(COLORTEXT);
    		panel.add(messagePane);
     
    		JLabel iconLabel = new JLabel(FLOPPY_DISK_ICON);
    		JPanel iconPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    		iconPanel.setOpaque(false);
    		iconPanel.add(iconLabel);
    		panel.add(iconPanel, BorderLayout.NORTH);
     
    		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));
    		buttonPanel.setOpaque(false);
    		buttonValider = createValiderButton();
    		buttonAnnuler = createAnnulerButton();
    		buttonPanel.add(buttonValider);
    		buttonPanel.add(buttonAnnuler);
    		panel.add(buttonPanel, BorderLayout.SOUTH);
    		add(panel);
     
    		DefaultFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
     
    			@Override
    			public boolean dispatchKeyEvent(KeyEvent e) {
    				if ( e.getID()==KeyEvent.KEY_PRESSED ) {
    					switch(e.getKeyCode()) {
    					case KeyEvent.VK_ENTER:
    						ok=true;
    						KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
    						dispose();
    						return true;
    					case KeyEvent.VK_ESCAPE:
    						ok=false;
    						KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
    						dispose();
    						return true;
    					}
    				}
    				return false;
    			}
    		});
     
    	}
     
    	private JButton createValiderButton() {
    		JButton jbutton = createButton("OK",e->ok=true);
    		return jbutton;
    	}
     
    	private JButton createAnnulerButton() {
    		JButton jbutton = createButton("ANNULER",e->ok=false);
    		return jbutton;
    	}
    	private JButton createButton(String text, ActionListener listener) {
     
    		JButton jbutton = new JButton(text);
    		jbutton.setBorder(BorderFactory.createCompoundBorder(
    				BorderFactory.createLineBorder(COLORBUTTONBORDER),
    				BorderFactory.createEmptyBorder(MARGINBUTTON,MARGINBUTTON,MARGINBUTTON,MARGINBUTTON)
    				));
    		jbutton.setFont(FONTBUTTON);
    		jbutton.setForeground(COLORTEXT);
    		jbutton.setBackground(COLORBUTTON);
    		jbutton.setPreferredSize(new Dimension(150,jbutton.getPreferredSize().height));
    		jbutton.addActionListener(e-> {
    			listener.actionPerformed(e);
    			dispose();
    		});
    		jbutton.setFocusable(false);
    		jbutton.setFocusPainted(false);
    		return jbutton;
     
    	}
     
    	private void showCentered() {
    		if ( !isVisible() ) {
    			pack();
    			setLocationRelativeTo(getParent());
    			setVisible(true);
    		}
    	}
     
    	public static boolean showDialog(Frame owner) {
    		CustomDialog dialog = new CustomDialog(owner);
    		dialog.showCentered();
    		return dialog.ok;
    	}
     
    	private static Icon createFloppyDiskIcon() {
     
    		BufferedImage image = new BufferedImage(160, 160, BufferedImage.TYPE_INT_ARGB);
     
    		Graphics2D g = image.createGraphics();
     
    		g.setColor(COLORICON);
     
    		g.setStroke(new BasicStroke(9, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
     
    		Polygon polygon = new Polygon(
    				new int[] {15, 130, 140, 140, 15},
    				new int[] {15, 15, 30, 140, 140},
    				5
    				);
    		g.draw(polygon);
     
    		g.drawRect(45, 15, 65, 45);
    		g.drawRect(85, 25, 15, 25);
    		g.drawRect(35, 80, 85, 60);
     
    		g.dispose();
     
    		return new ImageIcon(image);
     
    	}
     
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		JPanel buttonpanel = new JPanel(new GridBagLayout());
    		JButton button = new JButton("Afficher dialogue");
    		buttonpanel.add(button);
    		JPanel labelpanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    		JLabel reponse = new JLabel(" ");
    		labelpanel.add(reponse);
     
    		frame.add(buttonpanel);
    		frame.add(labelpanel, BorderLayout.SOUTH);
     
    		button.addActionListener(e-> {
    			boolean ok = CustomDialog.showDialog(null);
    			reponse.setText("Réponse : " + (ok?"VALIDER":"ANNULER"));
    		});
     
    		frame.pack();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		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.

  3. #3
    Membre régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut
    super,
    merci beaucoup

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

Discussions similaires

  1. Personnaliser la boite de dialogue Rechercher
    Par javelot69 dans le forum Access
    Réponses: 7
    Dernier message: 28/09/2006, 16h03
  2. Boite de confirmation
    Par nicoaix dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/05/2006, 12h01
  3. Debutant -> lien à partir d'une boite de confirmation
    Par alexbubs dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/10/2005, 15h46
  4. Generer une boite de confirmation lors de la femeture d'une fenêtre
    Par BernardT dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/07/2005, 13h51
  5. [MFC] Personnaliser sa boite de dialogue
    Par Guybrush113 dans le forum MFC
    Réponses: 16
    Dernier message: 05/05/2004, 11h03

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