【问题标题】:JOptionPane Can Not DIsplay EverythingJOptionPane 无法显示所有内容
【发布时间】:2014-07-28 17:50:31
【问题描述】:

Hello SO Community 我最近将我的程序从 Scanner 输入和显示更改为 JOptionPane 输入和显示,它被设置为显示用户指定年份的投资

目前,如果年数超过 3 年,它将终止程序,我将如何解决这个问题和/或创建一个弹出窗口来显示结果?提前谢谢大家。

import java.util.*;
import javax.swing.JOptionPane;

public class Investing {

public static void main (String[] args){

    double amount;

    double principal;

    double rate;

    Scanner input1 = new Scanner(System.in);

    String principals = JOptionPane.showInputDialog("Please Enter The Principal");
    principal = Double.parseDouble(principals);

    String rates = JOptionPane.showInputDialog("Please Enter The Rate Of Interest");
    rate = Double.parseDouble(rates);

    String years = JOptionPane.showInputDialog("Please Enter The Number Of Investment Years");
    double g = Double.parseDouble(years);
    String zs = JOptionPane.showInputDialog( "Please Enter Annual Contribution");
    double z = Double.parseDouble(zs);

    amount = principal;
    for(int year = 1; year <= g; year++){
        amount *= 1 + rate/100;
        amount+= z;
        JOptionPane.showMessageDialog( null, year + "  " + amount, zs, year);
    }
}
}

【问题讨论】:

    标签: java swing joptionpane


    【解决方案1】:

    你错误地使用了 JOptionPane

    JOptionPane.showMessageDialog( null, year + "  " + amount, zs, year);
    

    您将 year 作为消息类型传递,因此在第 3 年之后它会失败。您应该这样做

    JOptionPane.showMessageDialog( null, year + "  " + amount, "title", JOptionPane.INFORMATION_MESSAGE );
    

    【讨论】:

    • 这很好,它解决了问题,但是我如何将所有这些信息放入 JOptionPane 上的一个“表格”中?
    • JOptionPane#showMessageDialog 的消息参数为Object,因此您也可以将任何JComponent 作为消息传递。您可以构建一个JTable 并将其传递给JOptionPane#showMessageDialog 作为Object message
    【解决方案2】:

    也许您可以使用StringBuilder 来格式化for 循环中的文本,然后使用它在对话框中显示它。

    amount = principal;
    StringBuilder sb = new StringBuilder();
    for(int year = 1; year <= g; year++){
        amount *= 1 + rate/100;
        amount+= z;
        sb.append(new String(year + " " + amount + '\n'));
    }
    
    JOptionPane.showMessageDialog( null, sb.toString(), "Amount Owing", JOptionPane.INFORMATION_MESSAGE);
    

    【讨论】:

      【解决方案3】:

      使用字符串连接来显示messageDialogBox中的所有变量,并且可以使用只有两个参数的messageDialogBox来达到这个目的

      for(int year = 1; year <= g; year++){
          amount *= (1 + rate/100);
          amount+= z;
          String a = year + " " + amount + " "+ zs + " " + year;
          JOptionPane.showMessageDialog( null, a);
          }
      

      您正在使用带有变量的 showMessageDialog (year+" ",amount,zs,year) 作为它的参数

      JOptionPane.showMessageDialog (null, "Message", "Title", JOptionPane.MessageType);
      

      当年份大于 3 时会出错,因为只有三种类型的消息。有关更多信息,请阅读此 http://www.java2s.com/Tutorial/Java/0240__Swing/UsingJOptionPanetoDisplayaMessage.htm

      【讨论】:

        【解决方案4】:
        interest = principal * Math.pow((1 + rate/100),year);
        amount += z;
        

        而不是

        金额 *= 1 + 比率/100; 数量+= z;

        JOptionPane.showMessageDialog(
         null,year + " " + amount,zs,year, "Compound Interest",
         JOptionPane.INFORMATION_MESSAGE );
        

        Refer this

        【讨论】:

        • 我很欣赏它确实使程序更容易一点的答案,但问题是我在线程“main”java.lang.RuntimeException 中不断收到异常:JOptionPane:类型必须是 JOptionPane 之一。 ERROR_MESSAGE、JOptionPane.INFORMATION_MESSAGE、JOptionPane.WARNING_MESSAGE、JOptionPane.QUESTION_MESSAGE 或 JOptionPane.PLAIN_MESSAGE 在 javax.swing.JOptionPane.setMessageType(JOptionPane.java:2083) 在 javax.swing.JOptionPane.(JOptionPane.java:1842) 在javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:858) 在 javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:667)
        • @Minotaur 试试这个。您的选项窗格想知道消息是什么,是错误消息还是信息消息等。
        猜你喜欢
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多