JTextArea中的新行?

时间:2015-10-15 01:59:11

标签: java swing newline jtextarea joptionpane

这是该计划的问题:

编写一个Java应用程序,该程序将确定每个员工的总薪酬(使用'while','for'或'do / while'循环来输入多个员工)。公司支付"直接时间"在每个员工工作的前40个小时内付费并且花费一半时间"所有工作时间超过40小时。您的程序应该要求用户输入工作小时数和每小时费率。 将所有输出放在一个窗口中。将您的总薪酬格式化为小数点后两位。

这就是我编码的内容:

/*
 * This is a program that determines the gross pay for employees of a
 * company that pays "straight time" for the first 40 hours and "time
 * and a half" for all hours excess. The program asks the user to
 * input the hours worked and the rate per hour.
 */

// Imports.
import java.text.DecimalFormat; 
import javax.swing.*;

public class SalaryCalculator
{ 
   public static void main( String[] args ) 
   { 
     // Ask for number of employees.
     String num = JOptionPane.showInputDialog( "How many employees?" );
     int employees = Integer.parseInt( num );

     for (int counter = 0; counter != employees; counter++) 
     {
      // Ask for employee info.
      String name = JOptionPane.showInputDialog ( "Enter employee name:" );
      String rate = JOptionPane.showInputDialog( "Enter standard rate per hour in $:" );
      String hours = JOptionPane.showInputDialog( "Enter number of hours worked:" );

      // Convert string to double.
      double money = Double.parseDouble( rate );
      double time = Double.parseDouble( hours );

      // Create number format and text area.
      DecimalFormat noDecimal = new DecimalFormat( "0.00" ); 
      JTextArea outputArea = new JTextArea( 30, 30 );

      // Format text area.
      outputArea.append( "Name \t Rate \t Hours \t Total \n\n" );

      // Calculations and all.
      if ( time <= 40 )
      {
          outputArea.append( name + "\t" + "$" 
                  + money + "\t"  
                  + hours + "\t" + "$"
                  + noDecimal.format( money * time ) + "\n" ); 
      }
      else if( time > 40 )
      {
          outputArea.append( name + "\t" + "$" 
                  + money + "\t"  
                  + hours + "\t" + "$"
                  + noDecimal.format( ( money * 1.5 ) * time ) + "\n" ); 
      }

      // Output.
      JOptionPane.showConfirmDialog( null,
              outputArea, "Gross Pay", JOptionPane.DEFAULT_OPTION,
              JOptionPane.PLAIN_MESSAGE );
    }
  }
}

执行代码时,会询问员工人数。比方说我输入2。然后程序继续询问员工姓名,每小时工资和工作小时数。当我输入所有这些时,它会在我想要的窗口中很好地显示输出。 Picture: Data set 1. 之后,它再次询问员工姓名,工资和工时(因为我说有2名员工)。这就是我的问题所在。当我输入第二组数据时,它将替换结果窗口中的第一组数据。 Picture: Data set 2 replaces set 1. 我希望它显示在同一窗口的第一行下面的新行中,而不是先省略。

这是我第一次发布堆栈溢出。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您在循环的每次迭代中创建 new JTextArea。不要那样做。在循环之前创建JTextArea ,并使用相同的。