web-dev-qa-db-fra.com

Boîtes de message contextuelles

Je ne sais pas comment coder une 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 cela ne fonctionne pas:

String st = "Welcome";
JOptionPane.showMessageDialog(null, st);
57
gymcode

javax.swing.JOptionPane

Voici le code d'une méthode que j'appelle chaque fois que je souhaite qu'une boîte d'informations apparaisse, elle conserve 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. Cependant, tout Java.awt.Component peut être spécifié et la boîte de dialogue apparaîtra au centre de cette Component à la place.

J'ai tendance à utiliser la chaîne titleBar pour décrire d'où provient le code dans lequel la boîte est appelée. Ainsi, si cela devient agaçant, je peux facilement retrouver et supprimer le code responsable de l'envoi de spam à mon écran avec des infoBox.

Pour utiliser cette méthode, appelez:

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

javafx.scene.control.Alert

Pour une description détaillée de l’utilisation des boîtes de dialogue JavaFX, voir: Dialogues JavaFX (official) by code.makery. Ils sont beaucoup plus puissants et flexibles que les boîtes de dialogue Swing et capables de faire bien plus que simplement afficher des messages.

Comme ci-dessus, je vais vous présenter un petit exemple d'utilisation des dialogues 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 un kit d'outils à interface graphique unique, ce qui signifie que cette méthode doit être appelée directement à partir du thread d'application JavaFX. Si un autre thread fonctionne, nécessitant une boîte de dialogue, reportez-vous aux questions suivantes SO: JavaFX2: Puis-je suspendre une tâche/un service en arrière-plan? et Platform.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");
129
Troyseph

vous devez d’abord importer: import javax.swing.JOptionPane; alors 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. mettre tout ce qui est entre guillemets dans le message d'alerte. Le titre est évidemment le titre et la dernière partie le formatera comme un message d'erreur. si vous voulez un message normal, remplacez-le par PLAIN_MESSAGE. cela fonctionne plutôt bien à bien des égards, principalement pour les erreurs.

23
Brendan Cronan

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

  1. Par défaut, le titre de la boîte de message correspond au nom de la méthode d'appel. C'est pratique pour arrêter un thread à un moment donné, mais il doit être nettoyé avant d'être relâché.
  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 entière a aussi des méthodes de débogage et d’avertissement, mais je les ai coupées par souci de concision 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

À votre santé. Keith.

5
corlettk
JOptionPane.showMessageDialog(btn1, "you are clicked save button","title of dialog",2);

btn1 est une variable JButton et est utilisé dans cette boîte de dialogue pour ouvrir la boîte de dialogue btn1 ou textfield, etc., utilise par défaut la position null du cadre. 2 chiffres de l'icône de type d'alerte 3 est l'information 1,2,3,4 ..__ Ok. J'espère que vous comprenez

1
Saquib Azam

Ok, SO Je pense avoir une solution simple et efficace.

package AnotherPopUpMessage;
import javax.swing.JOptionPane;
public class AnotherPopUp {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JOptionPane.showMessageDialog(null, "Again? Where do all these come from?", 
            "PopUp4", JOptionPane.CLOSED_OPTION);
    }
}
0
NinjaFangGames

Utilisez la bibliothèque suivante: import javax.swing.JOptionPane;

Entrez en haut de la ligne de code . Vous devez seulement ajouter ceci, car les autres choses sont faites correctement!

0
Abel Nebay
import javax.swing.*;
class Demo extends JFrame
{
           String str1;
           Demo(String s1)
           {
             str1=s1;
            JOptionPane.showMessageDialog(null,"your message : "+str1);
            }
            public static void main (String ar[])
            {
             new Demo("Java");
            }
}
0
Rohit Ramtirthe