Boîte de dialogue; changer la police de caractère.

Résolu
Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017
- 11 nov. 2017 à 09:00
 Kiss9 - 17 nov. 2017 à 09:39
Bonjour, je suis en train d'implémenter une base de donnée sur Java.
Pour ce faire j'utilise JOptionPane.showInputDialog.

J'ai appris sur les forums que je peux changer la police du message affiché pour la question ainsi que le boutton avec UIManager.put.

Le problème ne vient pas des données écrites dans la boîte de dialogue mais des données reçu par l'utilisateur. Je trouve que la police de caractère qui reçoit le message entré par l'utilisateur est trop petite, à mon avis elle fait du 8 et j'aimerais augmenter la taille de cette police.

En vous remerciant. Kiss9

1 réponse

KX
Messages postés
16522
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2022
124
11 nov. 2017 à 15:41
Bonjour,

"avec UIManager.put"
Si tu fais ça, tu vas changer le comportement de toute la fenêtre pour tous les composants, tu ne vas pas pouvoir préciser l'utilisation uniquement pour ce composant uniquement.

Le plus propre serait d'utiliser JOptionPane.showOptionDialog qui permet de customiser le composant à afficher afin d'y mettre un JTextField avec une police modifiée.

Exemple :

import java.awt.*;
import javax.swing.*;

public static String showInputDialog(Component parentComponent, String message, String title, int messageType, Icon icon, float fontSize) {
    JPanel panel = new JPanel(new BorderLayout());
    panel.add(new JLabel(message), BorderLayout.NORTH);
    JTextField field = new JTextField();
    field.setFont(field.getFont().deriveFont(fontSize));
    panel.add(field, BorderLayout.SOUTH);
    int n = JOptionPane.showOptionDialog(parentComponent, panel, title, JOptionPane.OK_CANCEL_OPTION, messageType, icon, null, null);
    return (n == JOptionPane.OK_OPTION) ? field.getText() : null;
}

Petit code de test pour comparer les deux InputDialog :

public static void main(String[] args) {
    Component parentComponent = null;
    String message = "Entrez un mot";
    String title = "Choix";
    int messageType = JOptionPane.QUESTION_MESSAGE;
    Icon icon = null;
    float fontSize = 15;

    String text1 = (String) JOptionPane.showInputDialog(parentComponent, message, title, messageType, icon, null, null);
    System.out.println(text1);

    String text2 = showInputDialog(parentComponent, message, title, messageType, icon, fontSize);
    System.out.println(text2);
}
0
Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017

12 nov. 2017 à 14:24
Merci pour la réponse, effectivement c'est beaucoup mieux comme cela.
0
Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017

12 nov. 2017 à 15:01
Le seul défaut c'est qu'il faut cliquer dans la fenêtre avec la souris pour que l'entrée du clavier ou du lecteur de code barre soit prise en compte.
0
KX
Messages postés
16522
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2022
124 > Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017

12 nov. 2017 à 19:50
On peut forcer le focus sur le champs texte en ajoutant ceci :

// import javax.swing.event.*;
field.addAncestorListener(new AncestorListener() {
    public void ancestorAdded(AncestorEvent event) {
        JComponent component = event.getComponent();
        component.requestFocusInWindow();
        component.removeAncestorListener(this);
    }
    public void ancestorMoved(AncestorEvent event) {}
    public void ancestorRemoved(AncestorEvent event) {}
});
0
Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017
> KX
Messages postés
16522
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2022

16 nov. 2017 à 17:18
Merci, je ne sais pas comment insérer ce bout de code, je n'ai jamais travaillé avec des field.
0
KX
Messages postés
16522
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2022
124 > Kiss9
Messages postés
7
Date d'inscription
samedi 11 novembre 2017
Statut
Membre
Dernière intervention
16 novembre 2017

16 nov. 2017 à 17:33
Dans le premier code tu avais
JTextField field = new JTextField();
et bien tu mets le deuxième code juste après.
0