弹出消息框


71

我不确定如何在我的方法中编写弹出消息框的代码。

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

表单中的用户输入。它的工作,我只是想知道如何做一个弹出消息框
Gymcode

1
“我已尝试在我的方法中使用JOptionPanal,但它不起作用:”-请为我们澄清“不起作用”。怎么了?
气垫船充满鳗鱼,

1
“不起作用”是什么意思?不编译?在运行时引发异常?
Vivien Barousse,

我将代码放在“其他”中。如果以错误的比较结果单击按钮,则不会出现弹出窗口,也不会出现Java错误消息
Gymcode 2011年

5
然后,您的逻辑有些地方出了问题,但是在代码中可能没有显示给我们。您确定甚至输入了else块吗?您是否已将println语句放置在else块中以表明已输入它,尽管输入了JOptionPane却没有显示?您需要在此处进行一些调试。
气垫船充满鳗鱼,

Answers:


156

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

我倾向于使用titleBarString来描述从哪个位置调用该框,那样,如果它变得令人讨厌,我可以轻松地查找并删除负责使用infoBoxes向屏幕发送垃圾邮件的代码。

要使用此方法调用:

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

javafx.scene.control.Alert

有关如何使用JavaFX对话框的深入说明,请参见:code.makery的JavaFX对话框(官方)。它们比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();
    }
}

要记住的一件事是JavaFX是一个单线程GUI工具箱,这意味着应该直接从JavaFX应用程序线程调用此方法。如果您有另一个线程正在工作,需要对话,请参阅以下SO问答:JavaFX2:我可以暂停后台任务/服务吗?Platform.Runlater和Task Javafx

要使用此方法调用:

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

要么

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

1
如果您需要在任务栏中显示的解决方案,请参阅另一个SO答案
Thomas Weller 2015年

1
上面的注释表示对话框的任务栏中没有单独的图标。这是因为它不是唯一窗口,而是应用程序主窗口的子窗口。为了确保有单独的任务栏图标,您必须手动创建并填充一个新的独立窗口(尽管恕我直言,这很少值得付出努力)
Troyseph 2015年

30

首先,您必须导入: import javax.swing.JOptionPane; 那么您可以使用以下命令调用它:

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

null将其放在屏幕中间。将任何内容放在警告消息下的引号中。标题显然是标题,最后一部分将像错误消息一样格式化它。如果您想要常规消息,只需将其替换为PLAIN_MESSAGE。它在很多方面都可以很好地工作,主要是针对错误。


1
该答案只是先前答案的副本。
t0r0X

1
是的,但这是最有用的,因为我扫描了很长的答案,而这是我的眼睛被吸引的唯一答案
user5193682

6

我在调试时使用了一些“增强功能”,尤其是在运行项目时(即不在调试模式下)。

  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

干杯。基思


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

btn1是一个JButton变量,在此对话框中使用它来对话打开位置btn1或文本字段等,默认情况下使用frame的空位置。接下来是您的消息,下一步是对话框的标题。警报类型图标3的2个数字分别是信息1,2,3,4。好吧,希望你能理解


1

好的,基本上,我认为我有一个简单有效的解决方案。

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

1
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");
            }
}

2
尽管这可能是答案,但您应提供有关答案比现有答案更好的详细信息。
leopal

0

使用以下库: import javax.swing.JOptionPane;

在代码行的顶部输入。您只能添加此内容,因为其他操作正确完成了!


这是这里其他答案的副本
nijm

-2

在APPLET中弹出视窗

嗨,大家好,我在Internet上的小程序中搜索弹出窗口,但找不到Windows的答案。

虽然很简单,但我只是在帮助您。希望您会喜欢它的最简单形式。这是代码:

文件名:PopUpWindow.java对于Java文件,我们也需要html文件。

对于applet,让我们采用其popup.html

码:

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class PopUpWindow extends Applet{

public void init(){

Button open = new Button("open window");

add(open);

Button close = new Button("close window");

add(close);

 Frame f = new Frame("pupup win");

  f.setSize(200,200);




 open.addActionListener(new ActionListener() {

                 public void actionPerformed(ActionEvent e) {
                     if(!f.isShowing()) {
                         f.setVisible(true);
                     }


                 }

              });
 close.addActionListener(new ActionListener() {

                 public void actionPerformed(ActionEvent e) {
                     if(f.isShowing()) {
                        f.setVisible(false);
                     }

                 }

              });

 }

}




/*
<html>

<body>

<APPLET CODE="PopUpWindow" width="" height="">

</APPLET>

</body>

</html>

*/


to run:
$javac PopUpWindow.java && appletviewer popup.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.