JTextArea 中的新行?
New line in JTextArea?
这是程序的问题:
编写一个 Java 应用程序来确定每位员工的总工资(使用“while”、“for”或“do/while”循环来输入多个员工) .公司为每位员工的前 40 小时工作支付 "straight time",并为超过 40 小时的所有工作时间支付 "time-and-a-half"。您的程序应该要求用户输入工作时间和每小时费率。
将所有输出放在一个 window 中。将您的总工资格式化为小数点后两位。
这是我编码的:
/*
* 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。然后程序继续询问员工姓名、每小时工资和工作小时数。当我输入所有这些时,它会像我想要的那样在 window 中很好地显示输出。
Picture: Data set 1.
之后,它再次询问员工姓名、工资和工作时间(因为我说有 2 名员工)。这就是我的问题所在。当我输入第二组数据时,它会替换结果中的第一组数据window。
Picture: Data set 2 replaces set 1.
我希望它显示在同一个 window 中第一行下方的新行中,而不省略第一行。
这是我第一次在堆栈溢出上发帖。任何帮助将不胜感激!
您将在循环的每次迭代中创建一个 new JTextArea。不要那样做。在 循环之前创建 JTextArea ,并使用相同的循环。
这是程序的问题:
编写一个 Java 应用程序来确定每位员工的总工资(使用“while”、“for”或“do/while”循环来输入多个员工) .公司为每位员工的前 40 小时工作支付 "straight time",并为超过 40 小时的所有工作时间支付 "time-and-a-half"。您的程序应该要求用户输入工作时间和每小时费率。 将所有输出放在一个 window 中。将您的总工资格式化为小数点后两位。
这是我编码的:
/*
* 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。然后程序继续询问员工姓名、每小时工资和工作小时数。当我输入所有这些时,它会像我想要的那样在 window 中很好地显示输出。 Picture: Data set 1. 之后,它再次询问员工姓名、工资和工作时间(因为我说有 2 名员工)。这就是我的问题所在。当我输入第二组数据时,它会替换结果中的第一组数据window。 Picture: Data set 2 replaces set 1. 我希望它显示在同一个 window 中第一行下方的新行中,而不省略第一行。
这是我第一次在堆栈溢出上发帖。任何帮助将不胜感激!
您将在循环的每次迭代中创建一个 new JTextArea。不要那样做。在 循环之前创建 JTextArea ,并使用相同的循环。