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

Résolu
Kiss9 Messages postés 6 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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
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 6 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 6 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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > Kiss9 Messages postés 6 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 6 Date d'inscription samedi 11 novembre 2017 Statut Membre Dernière intervention 16 novembre 2017 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > Kiss9 Messages postés 6 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
Rejoignez-nous