Boîtes de message contextuelles


Je ne sais pas comment coder la boîte de message contextuelle dans mes méthodes.

public String verify(){
    String result = "failed";
    int authcode = staffBean.getVerifyCodeByName(getLoginUserName());

    if (code == authcode){       
        result ="success";
    }    
    else{ //statement to popup an error message box

    }
    return result;
}

J'ai essayé d'utiliser JOptionPane dans ma méthode, mais il ne fonctionne pas:

String st = "Welcome";
JOptionPane.showMessageDialog(null, st);
Author: Andrii Abramov, 2011-08-16

3 answers

Javax.swing.JOptionPane

Voici le code d'une méthode que j'appelle chaque fois que je veux qu'une boîte d'informations apparaisse, elle monopolise l'écran jusqu'à ce qu'elle soit acceptée:

import javax.swing.JOptionPane;

public class ClassNameHere
{

    public static void infoBox(String infoMessage, String titleBar)
    {
        JOptionPane.showMessageDialog(null, infoMessage, "InfoBox: " + titleBar, JOptionPane.INFORMATION_MESSAGE);
    }
}

Le premier paramètre JOptionPane (null dans cet exemple) est utilisé pour aligner la boîte de dialogue. null le fait se centrer sur l'écran, mais tout java.awt.Component peut être spécifié et la boîte de dialogue apparaîtra au centre de ce Component à la place.

J'ai tendance à utiliser la chaîne titleBar pour décrire où dans le code la boîte est appelé à partir de, de cette façon, si cela devient ennuyeux, je peux facilement retrouver et supprimer le code responsable du spam de mon écran avec des infoBoxes.

Pour utiliser cette méthode, appelez:

ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");

Javafx.scène.contrôle.Alerte

Pour une description détaillée de l'utilisation des boîtes de dialogue JavaFX, voir: Boîtes de dialogue JavaFX (officiel) par code.makery. Ils sont beaucoup plus puissants et flexibles que les boîtes de dialogue Swing et capables de bien plus que de simplement apparaître message.

Comme ci-dessus, je vais poster un petit exemple de la façon dont vous pouvez utiliser les boîtes de dialogue JavaFX pour obtenir le même résultat

import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.application.Platform;

public class ClassNameHere
{

    public static void infoBox(String infoMessage, String titleBar)
    {
        /* By specifying a null headerMessage String, we cause the dialog to
           not have a header */
        infoBox(infoMessage, titleBar, null);
    }

    public static void infoBox(String infoMessage, String titleBar, String headerMessage)
    {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setTitle(titleBar);
        alert.setHeaderText(headerMessage);
        alert.setContentText(infoMessage);
        alert.showAndWait();
    }
}

Une chose à garder à l'esprit est que JavaFX est une boîte à outils GUI à thread unique, ce qui signifie que cette méthode doit être appelée directement à partir du thread d'application JavaFX. Si vous avez un autre thread qui travaille, qui a besoin d'une boîte de dialogue, consultez ces questions et réponses: JavaFX2: Puis-je suspendre une tâche / service d'arrière-plan? et Plate-forme.Runlater et tâche Javafx .

Pour utiliser cette méthode, appelez:

ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");

Ou

ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE", "HEADER MESSAGE");
 156
Author: Troyseph, 2017-07-11 07:03:26

Vous devez d'abord importer: importer javax.swing.JOptionPane; ensuite, vous pouvez l'appeler en utilisant ceci:

JOptionPane.showMessageDialog(null, 
                              "ALERT MESSAGE", 
                              "TITLE", 
                              JOptionPane.WARNING_MESSAGE);

Le null le place au milieu de l'écran. mettez quoi que ce soit entre guillemets sous message d'alerte. Title est évidemment title et la dernière partie le formatera comme un message d'erreur. si vous voulez un message régulier, remplacez-le simplement par PLAIN_MESSAGE. cela fonctionne assez bien à bien des égards, principalement pour les erreurs.

 30
Author: Brendan Cronan, 2017-06-23 13:27:45

Quelques "améliorations" que j'utilise pour le débogage, en particulier lors de l'exécution de projets (c'est-à-dire pas en mode débogage).

  1. Par défaut, le titre de la boîte de message est le nom de la méthode appelante. Ceci est pratique pour arrêter un fil à un point donné, mais doit être nettoyé avant de le relâcher.
  2. Copiez automatiquement le nom de l'appelant et le message dans le presse-papiers, car vous ne pouvez pas rechercher une image!

    package forumposts;
    
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.StringSelection;
    import javax.swing.JOptionPane;
    
    public final class MsgBox
    {
        public static void info(String message) {
            info(message, theNameOfTheMethodThatCalledMe());
        }
        public static void info(String message, String caller) {
            show(message, caller, JOptionPane.INFORMATION_MESSAGE);
        }
    
        static void error(String message) {
            error(message, theNameOfTheMethodThatCalledMe());
        }
        public static void error(String message, String caller) {
            show(message, caller, JOptionPane.ERROR_MESSAGE);
        }
    
        public static void show(String message, String title, int iconId) {
            setClipboard(title+":"+NEW_LINE+message);
            JOptionPane.showMessageDialog(null, message, title, iconId);
        }
        private static final String NEW_LINE = System.lineSeparator();
    
        public static String theNameOfTheMethodThatCalledMe() {
            return Thread.currentThread().getStackTrace()[3].getMethodName();
        }
    
        public static void setClipboard(String message) {
            CLIPBOARD.setContents(new StringSelection(message), null);
            // nb: we don't respond to the "your content was splattered"
            //     event, so it's OK to pass a null owner.
        }
        private static final Toolkit AWT_TOOLKIT = Toolkit.getDefaultToolkit();
        private static final Clipboard CLIPBOARD = AWT_TOOLKIT.getSystemClipboard();
    
    }
    

La classe complète a également des méthodes de débogage et d'avertissement, mais je les ai coupées pour la brièveté et vous obtenez les points principaux de toute façon. Vous pouvez utiliser un booléen statique public isDebugEnabled pour supprimer les messages de débogage. Si cela est fait correctement, l'optimiseur supprimera (presque) ces appels de méthode de votre code de production. Voir: http://c2.com/cgi/wiki?ConditionalCompilationInJava

Santé. Keith.

 6
Author: , 2013-08-11 05:55:28