【问题标题】:Popup Message boxes弹出消息框
【发布时间】:2011-10-28 03:44:13
【问题描述】:

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

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

【问题讨论】:

  • 来自表单的用户输入。它的工作,我只是想知道如何做一个弹出消息框
  • "我曾尝试在我的方法中使用 JOptionPanal 但它不起作用:" -- 请为我们澄清“不起作用” .会发生什么?
  • “不起作用”是什么意思?不编译?运行时抛出异常?
  • 我把代码放在“else”中。当按钮点击错误比较时,没有弹出窗口和java错误消息
  • 那么你的逻辑有问题,但很可能是你没有向我们展示的代码。您确定甚至输入了 else 块吗?您是否在 else 块中放置了 println 语句以显示它已输入,并且尽管输入了 JOptionPane 不显示?你需要在这里做一些调试。

标签: java swing netbeans


【解决方案1】:

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

要记住的一点是,JavaFX 是一个单线程 GUI 工具包,这意味着应该直接从 JavaFX 应用程序线程调用此方法。如果您有另一个线程在工作,需要一个对话框,请查看这些 SO Q&As:JavaFX2: Can I pause a background Task / Service?Platform.Runlater and Task Javafx

要使用这个方法调用:

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

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

【讨论】:

  • 如果您需要在任务栏中显示的解决方案,see another SO answer
  • 上面的注释表示任务栏中没有单独的对话框图标。这是因为它不是一个独特的窗口,它是应用程序主窗口的子窗口。为了确保单独的任务栏图标,您必须手动创建并填充一个新的独立窗口(尽管恕我直言,这很少值得努力)
【解决方案2】:

首先你必须导入: 导入 javax.swing.JOptionPane; 然后你可以用这个来调用它:

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

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

【讨论】:

  • 这个答案只是上一个答案的副本。
  • 是的,但它是最有用的,因为我扫描了很长的答案,这是我眼睛唯一被吸引的答案
【解决方案3】:

我用于调试的几个“增强功能”,尤其是在运行项目时(即不在调试模式下)。

  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

干杯。基思。

【讨论】:

    【解决方案4】:
    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");
                }
    }
    

    【讨论】:

    • 虽然它可能是答案,但您应该详细说明您的答案如何优于现有答案。
    【解决方案5】:
    JOptionPane.showMessageDialog(btn1, "you are clicked save button","title of dialog",2);
    

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

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

        在代码行顶部输入。 你必须只添加这个,因为其他的事情都正确地完成了!

        【讨论】:

        • 这是其他答案的副本
        猜你喜欢
        • 1970-01-01
        • 2017-05-29
        • 2023-03-21
        • 2019-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        相关资源
        最近更新 更多