web-dev-qa-db-ja.com

ポップアップメッセージボックス

私は自分のメソッドにポップアップメッセージボックスをどのようにコーディングするかわからない。

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

私のメソッドでJOptionPaneを使用しようとしましたが、うまくいきません。

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

javax.swing.JOptionPane

これは、情報ボックスをポップアップさせたいときに呼び出すメソッドのコードです。受け入れられるまで画面を占有します。

import javax.swing.JOptionPane;

public class ClassNameHere
{

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

最初のJOptionPaneパラメータ(この例ではnull)はダイアログを整列させるために使用されます。 nullを指定すると画面の中央に配置されますが、任意のJava.awt.Componentを指定でき、代わりにダイアログがそのComponentの中央に表示されます。

titleBarという文字列を使ってコード内のどこからボックスが呼び出されているのかを記述することが多いので、迷惑になる場合はinfoBoxesを使って自分の画面をスパムしているコードを簡単に突き止めて削除できます。

このメソッド呼び出しを使用するには

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

javafx.scene.control.Alert

JavaFXダイアログの使い方の詳細については、 JavaFXダイアログ(公式) by code.makeryを参照してください。これらはSwingダイアログよりもはるかに強力で柔軟性があり、メッセージをポップアップするだけではありません。

上記と同じように、JavaFXダイアログを使用して同じ結果を達成する方法の小さな例を投稿します。

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

覚えておくべきことの1つは、JavaFXはシングルスレッドのGUIツールキットであることです。つまり、このメソッドはJavaFXアプリケーションスレッドから直接呼び出す必要があります。ダイアログを必要とする別のスレッドで作業している場合は、SO Q&Aを参照してください。 JavaFX2:バックグラウンドのタスク/サービスを一時停止できますか? and Platform.Runlater)そしてTask Javafx

このメソッド呼び出しを使用するには

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

または

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

最初にインポートする必要があります。import javax.swing.JOptionPane;その後、これを使用して呼び出すことができます。

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

nullは画面の中央に配置します。引用符で囲まれているものはすべて警告メッセージの下に置きます。タイトルは明らかにタイトルであり、最後の部分はエラーメッセージのようにそれをフォーマットします。通常のメッセージが必要な場合は、それをPLAIN_MESSAGEに置き換えてください。それは主にエラーのために多くの方法でかなりうまく機能します。

26
Brendan Cronan

特にプロジェクトを実行するとき(つまり、デバッグモードではないとき)にデバッグに使用する2つの「機能強化」。

  1. メッセージボックスのタイトルを呼び出し側メソッドの名前にデフォルト設定します。これは、ある時点でスレッドを停止するのに便利ですが、解放する前にクリーンアップする必要があります。
  2. 画像を検索できないため、発信者名とメッセージを自動的にクリップボードにコピーします。

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

フルクラスにはデバッグと警告のメソッドもありますが、私はそれらを簡潔にするためにカットしています。デバッグメッセージを抑制するために、パブリック静的ブール値isDebugEnabledを使用できます。適切に設定されていれば、オプティマイザは(ほとんど)本番コードからこれらのメソッド呼び出しを削除します。参照してください: http://c2.com/cgi/wiki?ConditionalCompilationInJava

乾杯。キース.

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

btn1はJButton変数であり、ダイアログのオープン位置btn1やtextfieldなどにこのダイアログで使用されます。デフォルトではframe.nextのnull位置を使用し、次にdialogのタイトルです。アラート番号アイコン3の2つの情報は1、2、3、4です。 Ok理解してください

1
Saquib Azam

わかりました、SO基本的に私は単純で効果的な解決策があると思います。

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

次のライブラリを使用してください。import javax.swing.JOptionPane;

コード行の先頭に入力してください。他のことは正しく行われているので、これを追加するだけです。

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