Popup Message boxes

Nie jestem pewien, jak kodować wyskakujące okienko wiadomości w moich metodach.

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;
}

Próbowałem użyć JOptionPane w mojej metodzie, ale to nie działa:

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

3 answers

Javax.swing.JOptionPane

Oto kod do metody, którą wywołuję, gdy chcę, aby wyskakiwało okno informacyjne, przeskakuje ono ekran, dopóki nie zostanie zaakceptowane:

import javax.swing.JOptionPane;

public class ClassNameHere
{

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

Pierwszy parametr JOptionPane (null w tym przykładzie) jest używany do wyrównania okna dialogowego. {[6] } powoduje, że Wyśrodkowuje się na ekranie, jednak dowolna java.awt.Component może być określona, a okno dialogowe pojawi się na środku tego Component.

Zazwyczaj używam titleBar ciąg znaków, aby opisać, gdzie w kodzie pole jest wywoływany z, w ten sposób, jeśli robi się irytujące, mogę łatwo wyśledzić i usunąć kod odpowiedzialny za spamowanie mojego ekranu z infoboksami.

Aby użyć tej metody wywołaj:

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

Javafx.miejsce.Kontrola.Alert

[[13]} szczegółowy opis korzystania z okien dialogowych JavaFX znajduje się w: okna dialogowe JavaFX (oficjalne) za pomocą kodu.makery. Są znacznie bardziej wydajne i elastyczne niż okna dialogowe Swing i mogą znacznie więcej niż tylko pojawiać się wiadomości.

Jak wyżej zamieszczę mały przykład, jak można użyć okien dialogowych JavaFX, aby osiągnąć ten sam wynik

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();
    }
}

Należy pamiętać, że JavaFX jest jednowątkowym zestawem narzędzi GUI, co oznacza, że ta metoda powinna być wywoływana bezpośrednio z wątku aplikacji JavaFX. Jeśli masz inny wątek wykonujący pracę, który wymaga okna dialogowego, Zobacz je tak Q & As: JavaFX2: Czy Mogę wstrzymać zadanie / Usługę w tle? i Platformy.Runlater i zadanie Javafx .

Aby użyć tej metody wywołaj:

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

Lub

ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE", "HEADER MESSAGE");
 156
Author: Troyseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 07:03:26

Najpierw musisz zaimportować: import javax.swing.JOptionPane; następnie można go nazwać używając tego:

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

Null umieszcza go na środku ekranu. umieść cokolwiek w cudzysłowie pod komunikatem alarmowym. Tytuł to oczywiście tytuł, a ostatnia część sformatuje go jak Komunikat o błędzie. jeśli chcesz mieć zwykłą wiadomość, po prostu zamień ją na PLAIN_MESSAGE. działa całkiem dobrze na wiele sposobów, głównie w przypadku błędów.

 30
Author: Brendan Cronan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-23 13:27:45

Kilka "ulepszeń", których używam do debugowania, szczególnie podczas uruchamiania projektów (tj. Nie w trybie debugowania).

  1. Domyślna nazwa pola Wiadomości do nazwy metody wywołującej. Jest to przydatne do zatrzymania wątku w danym punkcie, ale musi być oczyszczone przed zwolnieniem.
  2. Automatycznie skopiuj nazwę rozmówcy i wiadomość do schowka, ponieważ nie możesz przeszukiwać obrazu!

    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();
    
    }
    

Pełna klasa ma również metody debug i warning, ale wyciąłem je za zwięzłość i tak dostaniesz główne punkty. Możesz użyć publicznej statycznej logiki isdebugenabled, aby wyłączyć komunikaty debugowania. Jeśli zostanie to zrobione poprawnie, optymalizator (prawie) usunie te wywołania metod z kodu produkcyjnego. Zobacz: http://c2.com/cgi/wiki?ConditionalCompilationInJava

Zdrówko. Keith.
 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-11 05:55:28