web-dev-qa-db-fra.com

Java - Comment créer une boîte de dialogue personnalisée?

J'ai un bouton sur un JFrame que lorsque je clique dessus, je veux qu'une boîte de dialogue apparaisse avec plusieurs zones de texte pour la saisie par l'utilisateur. J'ai regardé tout autour pour essayer de comprendre comment faire, mais je continue de devenir plus confus. Quelqu'un peut-il aider?

42
Corrie

Si vous n'avez pas besoin de beaucoup de comportement personnalisé, JOptionPane est un bon gain de temps. Il prend en charge le placement et la localisation des options OK/Annuler et est un moyen rapide et sale d'afficher une boîte de dialogue personnalisée sans avoir à définir vos propres classes. La plupart du temps, le paramètre "message" dans JOptionPane est une chaîne, mais vous pouvez également passer un JComponent ou un tableau de JComponents.

Exemple:

JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
JPasswordField password = new JPasswordField();
final JComponent[] inputs = new JComponent[] {
        new JLabel("First"),
        firstName,
        new JLabel("Last"),
        lastName,
        new JLabel("Password"),
        password
};
int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
    System.out.println("You entered " +
            firstName.getText() + ", " +
            lastName.getText() + ", " +
            password.getText());
} else {
    System.out.println("User canceled / closed the dialog, result = " + result);
}
80
Sam Barnum

Essayez cette classe simple pour personnaliser une boîte de dialogue à votre goût:

import Java.util.ArrayList;
import Java.util.List;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;

public class CustomDialog
{
    private List<JComponent> components;

    private String title;
    private int messageType;
    private JRootPane rootPane;
    private String[] options;
    private int optionIndex;

    public CustomDialog()
    {
        components = new ArrayList<>();

        setTitle("Custom dialog");
        setMessageType(JOptionPane.PLAIN_MESSAGE);
        setRootPane(null);
        setOptions(new String[] { "OK", "Cancel" });
        setOptionSelection(0);
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public void setMessageType(int messageType)
    {
        this.messageType = messageType;
    }

    public void addComponent(JComponent component)
    {
        components.add(component);
    }

    public void addMessageText(String messageText)
    {
        JLabel label = new JLabel("<html>" + messageText + "</html>");

        components.add(label);
    }

    public void setRootPane(JRootPane rootPane)
    {
        this.rootPane = rootPane;
    }

    public void setOptions(String[] options)
    {
        this.options = options;
    }

    public void setOptionSelection(int optionIndex)
    {
        this.optionIndex = optionIndex;
    }

    public int show()
    {
        int optionType = JOptionPane.OK_CANCEL_OPTION;
        Object optionSelection = null;

        if(options.length != 0)
        {
            optionSelection = options[optionIndex];
        }

        int selection = JOptionPane.showOptionDialog(rootPane,
                components.toArray(), title, optionType, messageType, null,
                options, optionSelection);

        return selection;
    }

    public static String getLineBreak()
    {
        return "<br>";
    }
}
3
BullyWiiPlaza

Eh bien, vous créez essentiellement un JDialog, ajoutez vos composants de texte et rendez-le visible. Cela pourrait être utile si vous limitez le bit spécifique avec lequel vous rencontrez des problèmes.

1
Neil Coffey

Cette leçon du Java tutoriel explique chaque composant Swing en détail, avec des exemples et des liens API.

1
bdl

Si vous utilisez NetBeans IDE (la dernière version en ce moment est 6.5.1), vous pouvez l'utiliser pour créer une interface graphique de base Java application utilisant File-> New Projetez et choisissez la catégorie Java puis Java Desktop Application.

Une fois créé, vous aurez une application GUI simple, qui contient une boîte à propos qui peut être ouverte à l'aide d'une sélection de menu. Vous devriez pouvoir l'adapter à vos besoins et apprendre à ouvrir une boîte de dialogue en cliquant sur un bouton.

Vous pourrez modifier la boîte de dialogue visuellement. Supprimez les éléments qui s'y trouvent et ajoutez des zones de texte. Jouez avec et revenez avec plus de questions si vous êtes coincé :)

1
Arnold Spence

j'ai créé une API de dialogue personnalisée. vérifiez-le ici https://github.com/MarkMyWord03/CustomDialog . Il prend en charge le message et la boîte de confirmation. la boîte de dialogue d'entrée et d'options, tout comme dans joptionpane, sera bientôt implémentée.

Exemple de boîte de dialogue d'erreur de l'API CUstomDialog: Message d'erreur CustomDialog

1
MarkMyWord03