目录
使用数据类型、变量和字符串
任务2.1 数字与运算
1. 案例2.1——无交互简单计算器
2. 案例2.2——简单收银机
3. 案例2.3——输入文本显示器
4. 案例2.4——可交互简单计算器
5. 案例2.5——学生数据收集显示器
6. 案例2.6——平均值计算器
任务2.2 数据类型和变量
1. 案例2.7——简单的收银员APP
2. 案例2.8——GPA计算器
3. 案例2.9——简单进制转换器
4. 案例2.10——无交互讲师姓名展示器
5. 案例2.11——折扣计算器
6. 案例2.12——简单的税务计算器
任务2.3 字符串
1. 案例2.13——公民数据收集展示器
2. 案例2.14——字符串连接器
3. 案例2.15——字符位置跟踪器
4. 案例2.16——字符截取器
5. 案例2.17——动态字符截取器
使用数据类型、变量和字符串
上一单元学习了如何创建项目和GUI编程的基础知识,本次学习Java中的数据类型、变量和字符串。将清楚地说明Java GUI中数据类型和变量的概念和实现。
任务2.1 数字与运算
所有在计算机中处理的数据都是数字。这些数字可以是整数、十六进制或二进制数。本节中,我将写明如何使用和处理数字,以及如何在GUI应用程序上显示数字。此外,还将写明哪些运算符通常用于对数字执行操作
要对一个数字执行操作,我们需要一个运算符。通常用于对数字执行运算的数学运算符见下表
为了在Java GUI编程中看到数字和运算符的实现,我们将使用Label控件来显示它们。有关更多细节,我们将通过以下案例进一步探讨。
1. 案例2.1——无交互简单计算器
在这种情况下,程序将显示4个数学运算的结果,即加、减、乘、除和指数运算。当单击“执行”按钮时,这些数学运算的所有结果都将显示出来。
以下是制作此应用程序的步骤:
- 创建名为MathOperation的项目。
- 添加带有名称Number的JFrame Form 。
- 添加5个标签以显示5个数学运算的结果。使用以下名称设置每个标签的变量名lblAddition、lblSubstraction、lblMultiplication、lblDivision和lblExponential。此外,添加一个将用作Form窗口标题的标签,并使用“无交互简单计算器”更改文本。
- 添加一个带有变量名ProcessButton的按钮,并将文本更改为“执行”。
若要使所有标签在应用程序首次运行时不可见,则必须为所有标签指定空字符串值。下面是用于执行此操作的代码(放在Number类的构造函数中)。
Number.java(构造器):
应用程序首次运行时
“执行”按钮事件的代码如下:
上面的程序代码显示了如何在标签上显示数字。要在标签上显示数字,必须先将数字转换为字符串。代码Integer. toString()将整数转换为字符串。Integer类中的toString()函数将整数作为参数传递。
从上图中可以看到已经执行的5个数学运算的结果。连续的运算是加法(10+100)、减法(100-45)乘法(20×30)、除法(300/30)和指数(8³)。这在程序代码的第3到第7行中可以看到。
除了案例2.1之外,还将展示如何在Java GUI编程中处理更多的数字。
2. 案例2.2——简单收银机
在本例中,我们将看到如何在标签上显示数字并将它们与某些字符串组合。本例将演示一个简单的收银员,它将显示橙子的单价、购买橙子的数量和支付的总价。当单击“执行”按钮时,将执行所有这些过程。
以下是制作此应用程序的步骤:
- 创建名为Cashier的项目。
- 添加名为CashierReceipt的JFrame Form。
- 添加3个标签以显示橙子的单价、购买金额和要支付的总价。使用以下名称设置每个标签的变量名lblUnitprice、lblQuantity和lblTotalPaid。此外,添加一个将用作Form窗口标题的标签,并将文本更改为“橙子销售”。
- 添加一个带有变量名ProcessButton的按钮,并将文本更改为“执行”。
若要使窗体在首次运行时不显示任何内容,则用于显示单价、采购金额和总价的3个标签必须设置为空字符串。这是用来做这个的代码:
以下是应用程序首次运行
“执行”按钮事件的代码如下:
单击“执行”按钮后的应用程序显示
从程序视图中,可以看到如何显示由字符串组合的数字。为此,我们可以查看位于第3行到第5行的程序代码。
如何读取输入Form窗口文本字段
在学习如何使用Label显示数字之后,我们将学习如何从Text Field控件中读取数字。要将文本字段添加到Form窗口中,可以通过单击并拖动Palette编辑器中的文本字段来完成,该编辑器正好位于Swing Controls部分。此方法当然与向Form窗口添加标签时相同。有关更多详细信息,让我们看一个在下面的案例中使用文本字段的案例。
3. 案例2.3——输入文本显示器
本例演示如何从文本字段读取输入,然后将其显示在标签上。当单击“显示”按钮时,将执行读取和显示输入字符串的过程。
下面是制作这个应用程序的步骤:
- 创建名为TextFieldlnput的项目。
- 添加名为ReadingText的JFrame Form。
- 添加标签并将文本更改为“输入字段”,然后添加文本字段控件并将Text Field的变量名设置为txtInput。文本字段位于之前添加的标签的右侧。
- 要显示在文本字段中输入的字符串的结果,请添加名为lblOutput的标签。
- 此外,添加一个标签,该标签将用作用文本“输入文本显示器”创建的Form窗口的标题。
- 添加一个带有变量名DisplayButton的按钮,并将文本更改为“显示”。
这是应用程序首次运行时显示
lblOutput必须给定一个空字符串,以便在程序首次运行时不可见:
“显示”按钮事件的代码如下:
这是单击“显示”按钮时的应用程序显示
要检索在文本字段中输入的字符串,请使用代码txtInput.getText()。JText Field提供的getText()函数用于检索在文本字段中输入的字符串。因此,无论我们在文本字段中输入什么,都将作为字符串读取。检索和显示在文本字段中输入的字符串的过程可以在第3行中看到。
对于刚刚学习Java编程的人来说,要记住的是对getText()函数的访问是由JText Field类中的一个对象完成的,在本例中,该对象是Form窗口上文本字段的名称(txtInput)。
4. 案例2.4——可交互简单计算器
在这种情况下,我们将尝试对文本字段中输入的两个数字进行数学运算。要执行的数学运算包括加法、减法、乘法、除法和指数运算。每个操作都将用一个按钮表示。所以当单击按钮时,这两个数字的数学运算就会发生。
以下是制作此应用程序的步骤:
- 使用名称Calculator创建项目。
- 使用名称CalculatorForm添加JFrame Form。
- 在两个标签上输入以下文字:“数字1”和“数字 2”。然后添加两个文本字段以输入第一个数字和第二个数字。使用以下名称更改两个文本字段的变量名:txtNumber1和txtNumber2。
- 要显示在文本字段中输入的数字的数学运算结果,请添加名为lblOutput的标签。
- 此外,添加一个将用作Form窗口标题的标签,并使用“可交互简单计算器”更改文本。
- 添加5个按钮,用于加法、乘法、除法和指数运算。使用以下名称更改按钮的变量名:AdditionButton、SubtractionButton、MultiplicationButton、DivisionButton和Exponential Button。
必须给lblOutput一个空字符串,以使其在程序首次运行时不可见。这是执行此操作的代码。
CalculatorForm.Java(构造器):
这是应用程序首次运行时的显示
这是Form窗口上每个按钮的事件:
- private void AdditionButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblOutput.setText(Integer.toString(Integer.parseInt(txtNumber1.getText())
+Integer.parseInt(txtNumber2.getText())));
- }
- private void SubtractionButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblOutput.setText(Integer.toString(Integer.parseInt(txtNumber1.getText())-Integer.parseInt(txtNumber2.getText())));
- }
- private void MultiplicationButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblOutput.setText(Integer.toString(Integer.parseInt(txtNumber1.getText())
*Integer.parseInt(txtNumber2.getText())));
- }
- private void DivisionButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblOutput.setText(Integer.toString(Integer.parseInt(txtNumber1.getText())
/Integer.parseInt(txtNumber2.getText())));
- }
- private void ExponentialButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblOutput.setText(Double.toString(Math.pow(Double.parseDouble(txtNumber1.getText()),
Double.parseDouble(txtNumber2.getText()))));
- }
下面是每次数学运算完成时的应用程序显示如下
从例子2.4,可以看到如何从文本字段中检索两个数字形式的条目,然后对这两个数字执行数学运算。要对文本字段中输入的数字执行数学运算,必须先进行数据类型转换。数据类型转换是从字符串到整数或双精度(数字数据类型)完成的。数据类型转换过程之所以完成,是因为文本字段只将输入读取为字符串,因此文本字段中输入的任何内容都将读取为字符串,若要转换文本字段中输入的数字,请使用以下代码。
Integer.parseInt(txtNumber1.getText())
Integer.parseInt(txtNumber2.getText())
上面的两个代码用于将文本字段txtNumber1和文本字段txtNumber2中输入的数字转换为整数。除了转换为整数外,文本字段中输入的两个数字还可以通过使用以下代码转换为浮点数
Double.parseDouble(txtNumber1.getText())
Double.parseDouble(txtNumber2.getText())
完成数据类型转换后,可以对这两个数字进行数学运算。这可以在每个按钮的事件中看到,精确地在第3行、第7行、第11行、第15行和第19行。
所以,需要记住的是,在文本字段中输入的内容将作为字符串读取。即使我们输入一个数字,它仍将被作为字符串读取。因此,如果要对数字执行数学运算,则必须首先完成数据类型转换(从字符串转换为整数/双精度数)。
5. 案例2.5——学生数据收集显示器
以下案例将模拟学生资料填写表格,包括姓名、学生编号、部门、地址和平均成绩。单击“显示”按钮时将显示数据。
下面是制作此应用程序的步骤:
- 创建名为Student的项目。
- 添加名为StudentForm的JFrame Form。
- 添加五个带有以下文本的标签:“姓名”、“ID”、“部门”、“地址”和“平均成绩”,然后添加5个输入内容的文本字段txtName、txtID、txtDepartment、txtAddress和txtGPA。
- 要显示在文本字段中输入的输入结果,请添加5个标签并使用以下名称更改变量名:lblName、lblId、lblDepartment、lblAddress和lblGPA。
- 此外,添加一个将用作Form窗口标题的标签,文本内容为“学生数据收集显示器”。
- 添加一个变量名为DisplayButton的按钮,并将文本更改为“显示”
这是应用程序首次运行时的显示
“显示”按钮事件的代码如下。
- private void DisplayButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- lblName.setText("姓名 :"+txtName.getText());
- lblID.setText("ID :"+txtID.getText());
- lblDepartment.setText("部门 :"+txtDepartment.getText());
- lblAddress.setText("地址 :"+txtAddress.getText());
- lblGPA.setText("平均绩点 :"+txtGPA.getText());
- }
这是单击“显示”按钮时的应用程序显示
除了从文本字段读取输入之外,还可以使用文本字段显示数据或显示对程序执行的操作的结果。有关详细信息,下面的案例将显示如何使用文本字段显示数字和字符串。
6. 案例2.6——平均值计算器
这个例子将展示如何找到4个数字的平均值。此过程的结果将显示在文本字段中。
以下是制作此应用程序的步骤:
- 创建名为CalculateTheMean的项目。
- 添加名为MeanForm的JFrame Form。
- 添加4个标签,内容如下:“数量1”、“数量2”、“数量3”和“数量4”。并添加4个具有以下变量名的文本字段:txtNumber1、txtNumber2。txtNumber3和txtNumber4。
- 要显示在文本字段中输入的数字的平均计算结果,请添加一个变量名为txtOutput的文本字段。
- 此外,添加一个将用作Form窗口标题的标签,并用“计算平均数”更改文本。
- 添加一个变量名为CalculateButton的按钮,并将文本更改为“计算”。
这是应用程序首次运行时的显示
单机“计算”按钮事件的代码如下:
- private void CalculateButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- txtOutput.setText(Double.toString ((Double.parseDouble(txtNumber1.getText())+Double.parseDouble (txtNumber2.getText())
+Double.parseDouble(txtNumber3.getText()) +Double.parseDouble(txtNumber4.getText()))/4));
- }
这是单击“计算”按钮时的应用程序显示
要在文本字段中显示值,我们可以使用setText()函数,它是JTextField类的函数。在txtOutput中显示平均值计算结果的代码是txtOutput.setText(),见第3行。
任务2.2 数据类型和变量
在前面的小节中,学习了数字以及它在GUI编程中的使用。研究了如何使用数字和字符串而不将它们存储在变量中。这对于进一步的程序开发肯定不是很有效,因为已经处理过的数据不能再使用了。此外,我们还必须在每次执行进程时检索数据。
数据类型是在编程中处理的数据类型,而变量是根据要存储的数据类型命名的,用于存储数据。变量也可以解释为临时数据存储。Java是一种完全面向对象的编程语言,它具有原始数据类型和对象数据类型。基本数据类型是不由类定义的基本数据类型。
有关详细信息,下表为主要数据类型。
原始数据类型可以分为整数和浮点两组。整数数据类型用于处理整数数据,而浮点数用于处理上表中的小数数据。可以看出,分类为整数的数据类型有char、bytes、short、int和long。而浮点中包含的数据类型是float和double。每个数据类型都有不同的大小,这表示可以容纳的数据量或大小。
数据类型的使用与变量密切相关,在哪里使用数据类型,必须先声明它。下面是命名/声明变量的格式和案例。
datatype cariablename
例子:
int data;
long data2;
float data3;
double data4;
上面的案例演示如何声明int、long、float和double类型的变量。在命名变量时,必须考虑以下几点:
- 变量名可以以大写或小写字母开头。
- 变量名可以由字母和数字组成。
- 变量名不能以空格开头。
- 变量名不能以数字开头。
int DataKu; //合法,变量名用大写字母开头
long Data10; //合法,表量名包含字母和数字
double _data90; //合法,变量名由下标“_”开头,但是不推荐
short Data_y; //合法
float data x; //不合法,变量名不能含有空格
double 09_data; //不合法,变量名不能由数字开头
上面的变量声明案例演示如何声明正确的变量以及如何避免变量声明中的错误。
1. 案例2.7——简单的收银员APP
这个案例将说明计算商店总付款的过程。程序将要求管理员输入项目的名称、购买的项目数量和项目的单价。此外,该计划还提供了折扣设施,如果商店提供了折扣,那么管理员只需输入折扣的百分比。同时,如果没有折扣,管理员只需要在折扣文本字段中输入0。
下面是制作此应用程序的步骤:
- 创建名为StoreApp的项目
- 添加名为CashierForm的JFrame Form。
- 添加4个标签,内容如下:“项目名称”、“项目价格”、“采购数量”和“折扣百分比”。然后添加4个文本字段作为输入项目名称、项目价格、采购数量和折扣百分比的位置。使用以下名称更改每个文本字段的变量名:txtltem、txtPrice、txtQuantity和txtDiscount
- 若要显示总折扣和要支付的总付款,请添加两个具有以下变量名称的文本字段:txtTotalDiscount和txtTotaIPaid。
- 此外,添加一个将用作Form窗口标题的标签,然后使用“简单的收银员APP”更改文本。
- 添加一个带有变量名ProcessButton的按钮,并将文本更改为“执行”。
这是应用程序首次运行时结果
单机“执行”按钮事件的代码如下:
- private void ProcessButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- int price;
- int quantity;
- double discount;
- int total;
- int totaldiscount;
- int totalpaid;
- price=Integer.parseInt(txtPrice.getText());
- quantity=Integer.parseInt(txtQuantity.getText());
- discount=Double.parseDouble(txtDiscount.getText())/100;
- total=(price*quantity);
- totaldiscount=(int)(total*discount);
- totalpaid=total-totaldiscount;
- txtTotalDiscount.setText(Integer.toString(totaldiscount));
- txtTotaIPaid.setText(Integer.toString(totalpaid));
- }
这是单击“执行”按钮时的应用程序显示。
从案例2.7中,我们可以看到如何声明变量并使用它们存储数据。在上述情况下,变量的声明可以在第3行看到,直到第8行。在这种情况下,有5个整数变量和一个重叠点(double)变量。整数变量是price、quantity、total、totaldiscount和totalpaid。而增值点变量是discount。根据这些变量各自的函数命名,其中price变量用于存储商品价格,变量quantity用于存储购买的商品数量,discount变量用于存储折扣百分比,total变量用于在获得折扣之前确定整个项目的总价,对于totaldiscount和totalpaid变量,totalpaid变量用于存储折扣的数量和获得折扣之后的总付款。存储数据的过程可以在第9行中看到,直到第14行为止。存储在变量中的数据可以在需要时通过调用变量来使用。
因此,在命名变量时需要考虑的是,必须根据遇到的实际情况对变量进行调整,以便名称易于记忆。
2. 案例2.8——GPA计算器
这个案例将展示计算平均绩点(GPA)的过程。这个程序将要求用户输入一些数据,包括学生姓名、学生ID和包括学分在内的三个科目的分数。本例中使用的三门学科是工程数学、编程语言和数据库。程序将显示输出,包括姓名、学生ID和平均绩点GPA。
以下是制作此应用程序的步骤:
- 创建名为GPACalculator的项目。
- 添加名为GPAForm的JFrame Form。
- 添加5个标签,内容如下:“学生姓名”、“学生ID”、“工程数据”、“编程”和“数据库”。此外,添加3个标签,并将所有文本更改为“学分”。然后添加8个文本字段,用于输入学生姓名、学生ID、工程数学分数、编程分数、数据库分数和所有科目的学分。使用以下名称更改每个文本字段的变量名:txtName、txtID,txtEngineeringMath、txtProgramming、txtDatabase、txtCreditEngineeringmath、txtCreditProgramming和txtCreditDatabase。
- 使用以下变量名添加3个标签:lblName、lblID和lblGPA。所有标签都用于显示输出。
- 此外,添加一个将用作Form窗口标题的标签,然后将文本更改为“GPA计算器”。
- 添加一个带有变量名Processutton的按钮,并将文本更改为“计算”。
GPA计算过程使用以下公式进行:
GPA=score*creditcredit
本例中使用的分数范围是从0到4,表示E到A。
这是应用程序首次运行时的显示
单机“计算”按钮事件的代码如下:
- private void ProcessuttonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- float engineeringmath, programming, database;
- float creditengineeringmath, creditprogramming, creditdatabase;
- engineeringmath=Float.parseFloat (txtEngineeringMath.getText());
- creditengineeringmath=Float.parseFloat(txtCreditEngineeringmath.getText());
- programming=Float.parseFloat(txtProgramming.getText());
- creditprogramming=Float.parseFloat (txtCreditProgramming. getText());
- database=Float.parseFloat(txtDatabase.getText());
- creditdatabase=Float.parseFloat (txtCreditDatabase. getText());
- float total=(engineeringmath*creditengineeringmath)+
(programming*creditprogramming)+(database*creditdatabase);
- GPA=total/(creditengineeringmath+creditprogramming+creditdatabase);
- lblName.setText ("学生姓名 :"+txtName.getText());
- lblID.setText ("学生ID :"+txtID.getText());
- lblGPA.setText ("平均绩点GPA : "+Float.toString (GPA));
- }
这是单击“计算”按钮时的应用程序显示
注意:注释是不执行的程序行。注释用于提供与程序中的代码相关的信息或解释。注释还可用于提供有关程序工作原理的说明。若要生成注释,请使用//作为程序代码的前缀。下面是一个如何在程序中使用注释的案例。
int data; //声明变量为int类型
double number; //声明变量为double类型
也可以使用符号/**/。有关更多详细信息,下面是使用第二种方法对程序进行注释的案例。
long size; /*声明变量为long类型*/
double num; /*声明变量为double类型*/
使用第二种方式进行注释通常用于希望进行长注释或希望关闭程序中的几行代码时。
有关更多详细信息,让我们看看以下情况下comment的实现。
3. 案例2.9——简单进制转换器
下面的例子将显示十进制到二进制的转换过程。程序将要求输入一个十进制数,然后当单击“转换”按钮时,它将被转换成二进制。十进制数将由八位二进制数表示,二进制数的每一位都将放在一个文本字段中。
下面是制作此应用程序的步骤:
- 创建名为NumberConversion的项目。
- 添加名为ConversionForm的JFrame Form。
- 添加文本为“输入数字”的标签。另外,添加一个文本字段并用txtNumber更改变量名。
- 添加八个标签,名称如下:“位7”、“位6”、“位5”、“位4”、“位3”、“位2”、“位1”和“位0”。然后添加8个文本字段以显示转换结果的8位。使用以下名称更改每个文本字段的变量名:txtBit7、txtBit6、txtBit5、titBit4、titBit3、txtBit2、titBit1和txtBit0。
- 此外,添加一个将用作Form窗口标题的标签,然后修改内容为“简单进制转换器”。
- 添加一个带有变量名ConversionButton的按钮,并将文本更改为“转换”。
这是应用程序首次运行时的显示
单机“转换”按钮事件的代码如下:
- private void ConversionButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- int number;
- int bit0;
- int bit1;
- int bit2;
- int bit3;
- int bit4;
- int bit5;
- int bit6;
- int bit7;
- number=Integer.parseInt(txtNumber.getText());
- bit7=number/128;
- number=number%128;
- bit6=number/64;
- number=number%64;
- bit5=number/32;
- number=number%32;
- bit4=number/16;
- number=number%16;
- bit3=number/8;
- number=number%8;
- bit2=number/4;
- number=number%4;
- bit1=number/2;
- number=number%2;
- bit0=number;
- /*显示结果*/
- txtBit7.setText(Integer.toString(bit7));
- txtBit6.setText(Integer.toString(bit6));
- txtBit5.setText(Integer.toString(bit5));
- txtBit4.setText(Integer.toString(bit4));
- txtBit3.setText(Integer.toString(bit3));
- txtBit2.setText(Integer.toString(bit2));
- txtBit1.setText(Integer.toString(bit1));
- txtBit0.setText(Integer.toString(bit0));
- }
下面是转换过程完成时的应用程序显示
如何在列表中显示字符串和数字
在本小节中,我们将学习如何使用List控件来显示程序的输出。List是来自JList类的控件,该类通常用于以列表形式显示输出。要添加列表控件,只需单击并拖动Palette编辑器Swing Controls部分中的List。有关更多详细信息,让我们看看下面案例中List控件的使用。
4. 案例2.10——无交互讲师姓名展示器
本案例将展示如何使用List控件显示五位讲师的姓名。单击“Display”按钮时,程序将显示讲师的姓名。
以下是制作此应用程序的步骤:
- 创建名为LecturerList的项目。
- 添加名为“LecturerForm”的JFrame Form。
- 添加将用于显示讲师姓名的List控件,然后将列表的变量名更改为listLecturerName。
- 此外,添加一个将用作表格标题的标签,然后将文本更改为“无交互讲师姓名展示器”
- 添加一个变量名为DisplayButton的按钮,并将文本更改为“显示”。
这是应用程序首次运行时的显示
第一次将List控件添加到窗体时,它将包含默认项。这些项是列表控件的默认内容。要删除这些项,可以选择properties,然后选择model,然后删除默认项。有关详细信息如下表
在此模型中,可以删除List控件并为其赋值。简单地说,在本节中,我们可以设置要在List控件中显示的内容。
“显示”按钮事件的代码如下。
- private void DisplayButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- String[] lecturer={"企业家演说家:马云",
"演说家:李燕杰","青年励志演说家:杨青松",
"历史家:袁腾飞","英语家:罗永浩"};
- listLecturerName.setListData(lecturer);
- }
这是单击“显示”按钮时的应用程序显示
在案例2.10中,我们可以看到如何为列表赋值。列表控件以集合数据或数组的形式处理数据。因此,如果要将值赋给列表,则必须首先将该值存储在无序或向量中。正如在第3行看到的,讲师的姓名列表存储在一个数组lecturer中。然后使用setListData()函数将存储的数据显示给List控件。此函数将对象数组和向量作为参数传递。根据第4行代码,可以看到setListData()函数以lecturer为参数。
5. 案例2.11——折扣计算器
这个例子是计算购买商品的总折扣的一个例子。在这种情况下,程序将要求用户输入项目名称、单价、购买的项目数量和折扣百分比。程序将计算获得的总折扣并将其显示在列表中。单击“处理”按钮时将执行所有处理。
以下是制作此应用程序的步骤:
- 创建名为DiscountList的项目。
- 使用DiscountForm添加到JFrame Form。
- 添加4个文本为“项目”、“价格”、“数量”和“优惠”的标签,然后添加四个文本字段,并使用以下名称更改变量名称:txtItem、txtPrice、txtQuantity和txtDiscount。
- 添加将用于显示总折扣的列表,然后将列表的变量名更改为IistDiscount。
- 此外,添加一个将用作Form窗口标题的标签,然后使用“贝尔程序员应用商店”更改文本。
- 添加一个带有变量名ProcessButton的按钮,并将文本更改为“处理”。
这是应用程序首次运行时的显示
在为“处理”按钮创建事件之前,我们将使用以下代码导入Vector类:
import java.util.Vector;
之后,使用名称item声明Vector类的一个对象。此声明在构造函数(全局变量声明)上方输入的。
Vector item = new Vector();
/**
* Creates new form DiscountForm
*/
public DiscountForm() {
initComponents();
}
对象或变量的全局声明的目的是使类中的所有程序行都能识别该对象。
“处理”按钮事件的代码如下:
- private void listColor2ValueChanged(javax.swing.event.ListSelectionEvent evt) {
- // TODO add your handling code here:
- int price;//存储价格的变量
- int quantity;//存储数量的变量
- int discount;//discount
- int total;//存储支付总额的变量
- float totaldiscount;//存储折扣总额的变量
- price = Integer.parseInt(txtPrice.getText());
- quantity = Integer.parseInt(txtQuantity.getText());
- discount = Integer.parseInt(txtDiscount.getText());
- total=price*quantity;
- totaldiscount=(float)total*((float)discount/100);
- item.add(totaldiscount);
- listDiscount.setListData(item);
- }
在这种情况下,向量对象用于存储将显示到列表中的项。Vector是一个类,用于像数组一样处理多个数据,但Vector是动态的。在上一个例子中,我们使用数组存储显示到列表中的数据之后,它还显示了另一种显示列表中项目的方法。
在编写完所有程序代码之后,现在我们将通过输入4项产品来进行测试。下面是单击“处理”按钮时的应用程序显示
从上图可以看出,每个项目的总折扣将显示在列表中。所以每次输入一个项目时,总折扣将继续显示在现有折扣列表的底部。
局部和全局变量
在例子2.11中,我们提到了一些关于全局变量的内容,这次我们将讨论全局变量和局部变量到底是什么?变量有两个作用域,即局部作用域和全局作用域,所以称之为局部变量和全局变量。局部变量是在方法中声明的变量,只在方法本身中识别。而全局变量是在类中声明并由程序的所有行识别的变量。
在全局声明变量时,只要变量在其所属类的范围内,就可以随时在任何方法中使用该变量。这当然与局部变量非常不同,局部变量只能在案例2.7中声明的方法块中使用,我们可以看到局部变量的声明和使用,在每个button事件中必须重新声明变量。如果在这种情况下所有的变量都是全局声明的,那么在每次事件中我们不再需要重新声明这些变量,我们只需要使用它们。
有关更多详细信息,下面的案例将显示程序中全局变量的实现。
6. 案例2.12——简单的税务计算器
此案例将显示购买总额的税务计算过程。程序将要求用户输入项目名称、价格和数量。然后,当用户单击“处理”按钮时,程序将显示支付总额。此外,当用户单击“计算税款”按钮时,程序还将计算买方必须支付的税款金额。每个购物数量的税金是2%。
以下是制作此应用程序的步骤
- 使用名称TaxCalculator创建项目
- 添加名为CashierForm的JFrame Form。
- 添加带有以下文本的三个标签:“项目”、“价格”和“数量”。然后添加三个文本字段,并使用以下名称更改变量名称:txtltem、txtPrice和txtQuantity。
- 若要显示交易记录中的总付款和总税款,请添加两个带有以下文本的标签:“支付总额”和“税收总额”,然后添加两个具有以下变量名称的文本字段:txtTotalPaid和txtTotalTax
- 此外,添加一个将用作Form窗口标题的标签,然后使用“税务计算器”更改文本
- 添加两个具有以下变量名的按钮:ProcessButtton和TaxButton。并使用以下文本更改每个按钮的文本:“处理”和“计算税款”
这是应用程序首次运行时的显示
在如上所述设计程序显示之后,下一步是声明计算总交易和必须支付的总税款所需的全局变量。如前一例所述,全局变量声明在创建的Form窗口类的构造函数之上,在本例中,CashierForm类中。
- int quantity;//声明数量变量
- int price;声明价格变量
- int totalpaid;//声明支付总额变量
- int totaltax;//声明税收总额变量
- double tax = 0.02;//用2%(0.02)申报并启动税务变量
- public CashierForm() {
- initComponents();
- }
上面的代码是程序所需全局变量的声明。“处理”和“计算税款”按钮的事件如下
- private void ProcessButttonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- price = Integer.parseInt(txtPrice.getText());
- quantity = Integer.parseInt(txtQuantity.getText());
- totalpaid = price*quantity;
- txtTotalPaid.setText(Integer.toString(totalpaid));
- }
- private void TaxButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- double numtax;//declare the var iable of numtax (local var iable)
- numtax=(double)quantity*tax;
- totaltax=(int)((double)totalpaid*numtax);
- txtTotalTax. setText(Integer.toString(totaltax));
- }
这是单击两个按钮时的应用程序显示
在上面的代码中,你可以看到quantity、price、totalpaid、totaltax和tax的变量声明为全局变量。因此,在出现Process按钮和Tax按钮时,不再需要声明所有这些变量。所有这些变量都可以在类中的所有程序代码中识别。
任务2.3 字符串
字符串是编程中最常用的数据类型之一。句子、单词、短语、电话号码、姓名、地址和字母都是字符串的例子,字符串也可以说是用英文半角双引号("")括起来的一组字符。
字符串被分类为对象数据类型,不是基元数据类型。要使用字符串数据类型,首先要声明它。声明String类型的变量的方法与使用前面讨论的原始数据类型声明变量的方法相同。
String variablename;
这些格式是字符串数据类型的变量声明格式。将字符串存储到变量可以通过将其赋给该变量来实现。例如,我们将声明一个名为dataString的字符串变量,它将包含短语“I Love Java GUI Programming”。
String dataString = "I Love Java GUI Programming";
通过将字符串数据存储到变量中,我们可以随时使用该数据。有关更多详细信息,让我们看看下面的案例。
1. 案例2.13——公民数据收集展示器
此案例将显示使用Form窗口收集的公民数据。Form窗口将要求用户在Form窗口中输入数据,包括ID、姓名、头衔、出生地和日期、地址和最新教育程度。单击“处理”按钮后,将使用标签显示所有数据。
以下是制作此应用程序的步骤:
- 创建名为CitizenData的项目。
- 添加名为CitizenForm的JFrame Form。
- 添加6个标签,内容如下:内容如下:"ID","姓名","头衔","出生地/日期","住址"和"教育 "。然后添加6个文本字段,并使用以下名称更改每个变量的名称:txtID、txtName txtTitle、txtPDB 、txtAddress和txtEducation。
- 要显示公民数据的详细信息,请添加6个标签,并使用以下名称更改变量名:lblID、lblName、lblTitle、lblPDB、lblAddress、lblEducation。
- 此外,添加一个将用作Form窗口标题的标签,然后使用“公民数据表”更改文本。
- 添加一个带有变量名ProcessButton的按钮,并将文本更改为“处理”。
这是应用程序首次运行时的显示。
“处理”按钮事件的代码如下:
- private void ProcessButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- String name,id,title,pdb,address,education;
- //将数据存储到变量中
- id = txtID.getText();
- name = txtName.getText();
- title = txtTitle.getText();
- pdb = txtPDB.getText();
- address = txtAddress.getText();
- education = txtEducation.getText();
- //显示数据
- lblID.setText("ID :"+id);
- lblName.setText("姓名 :"+name);
- lblTitle.setText("头衔 :"+title);
- lblPDB.setText("出生地/日期 :"+pdb);
- lblAddress.setText("住址 :"+address);
- lblEducation.setText("教育 :"+education);
- }
这是单击“处理”按钮时的应用程序显示
在上面的案例2.13中,可以看到如何使用字符串数据类型来存储数据。如第3行所示声明字符串变量后,执行将数据存储到这些变量中的过程(如第5行到第10行所示)。在存储过程中,不需要数据类型转换,因为通常文本字段以字符串的形式处理数据。当显示存储在变量中的数据(如12行到17行所示)时,也可以看到同样的情况,因为标签处理字符串数据,数据不再需要转换。
与数字数据类型(int、long、short、float、double)不同,字符串数据类型不能执行数学运算。可以对字符串执行以下操作:连接、跟踪字符串的索引位置、字符串分隔、字符串比较、字符替换等等。当存在涉及字符串数据类型的操作时,这些操作非常有用。有关更多详细信息,下面的案例将显示如何实现这些操作。
2. 案例2.14——字符串连接器
这个例子将展示如何连接两个字符串。在这种情况下,将要求用户输入两个单词或句子,然后通过单击“合并单词”按钮将这两个单词或句子合并为一个单词或句子
下面是制作此应用程序的步骤。
- 创建名为ConcateTheString的项目。
- 添加名为StringForm的JFrame Form。、
- 添加两个带有以下文字的标签:“单词 1”和“单词 2”。然后添加两个文本字段并使用以下名称更改变量名:txtWord1和txtWord2。
- 若要显示串联结果,请添加具有以下可变名称的文本字段:txtOutput。
- 此外,添加一个将用作Form窗口标题的标签,并使用“两个字符串的连接”更改文本。
- 添加一个变量名为ConcateButton的按钮,并将文本更改为“合并单词”。
这是应用程序首次运行时的显示
“合并单词”按钮事件的代码如下:
- private void ConcateButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- String word1 = txtWord1.getText();
- String word2 = txtWord2.getText();
- String output = word1+word2;//使用运算符连接两个字符串
- txtOutput.setText(output);
- }
下面是单击“合并单词”按钮时的应用程序显示
从上面的程序视图可以看出,第一个文本字段中包含的字符串 Turida Barat与第二个文本字段中包含的字符串 Village成功地结合在一起。要连接两个字符串,可以使用运算符,如代码第5行所示。因此,对两个字符串使用运算符的目的是浓缩这两个字符串。因此,如果有两个包含数字的字符串,则使用+运算符的加法运算不会像数学运算那样生成数字,而是生成字符串连接。
3. 案例2.15——字符位置跟踪器
本例将显示如何跟踪字符串中包含的字符的位置。在这种情况下,程序将要求用户输入字符串,然后用户也将被要求输入字符串中要搜索的字符。当用户单击“追踪位置”按钮时,程序将显示字符的位置。
以下是制作此应用程序的步骤:
- 创建名称为TracingTheString的项目。
- 添加名为TracingForm的JFrame Form。
- 添加带有以下文本的两个标签:“单词”和“字符”,然后添加具有以下变量名的两个文本字段:txtWord 和 txtChar。
- 要显示字符的位置,请添加一个具有以下变量名的文本字段:txtOutput。
- 此外,添加一个将用作Form窗口标题的标签,并使用“跟踪字符串位置”更改文本。
- 添加一个变量名为TraceButton的按钮,并将文本更改为“追踪位置”。
这是应用程序首次运行时的显示
“追踪位置”按钮事件的代码如下:
- private void TraceButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- String word = txtWord.getText();
- String character = txtChar.getText();
- int position = word.indexOf(character);
- txtOutput.setText("字符: "+character+"的索引位置为"+
Integer.toString(position)+"");
- }
这是追踪定位完成时的应用程序显示
要查找字符的索引位置,可以使用index of()函数,如第5行所示。函数将返回字符串中包含的字符的索引位置。正如我们在应用程序显示中看到的,JAVA中的字符V在第二个索引中,字符A在1个索引中。当我们跟踪字符A时,我们得到的索引位置是1,而字符A也在3。这表明index of()函数只返回找到的字符的第一个位置。
需要记住的是字符串中字符的索引位置从0到n-1。
除了上面学习的方法外,Java还有其他几个函数可以用来对字符串执行操作,下面的表将显示一些在操作中常用的函数,这些函数用于环境字符串。
方法 |
例子 |
描述 |
indexOf(String “Character”) |
A.indexOf(“V”) |
用于查找字符V在stirng A中的索引位置 |
Substring(int position) |
A.substring(5) |
用于将字符串A从第5个索引分隔到最后 |
Replace(char old,char new) |
A.replace(‘B’,’Q’) |
用于将字符串A中的字符B更改为Q |
toCharArray() |
A.toCharArray() |
用于将字符串转换为字符数组 |
toUpperCase() |
A. toUpperCase() |
用于将字符串A转换为大写 |
toLowerCase() |
A. toLowerCase() |
用于将字符串A转换小写 |
equals(String B) |
A.equals(B) |
用来比较字符串A和B |
有关更多详细信息,下面的案例将显示
4. 案例2.16——字符截取器
下面的例子将展示如何使用substring()函数来访问字符串的某些部分。在本例中,显示从第5个位置到结尾的字符串。或者在一定范围的位置显示字符,例如在3到10的位置显示字符。程序将要求用户在文本字段中输入一个句子,然后单击“Display”按钮时将显示结果。
以下是制作此应用程序的步骤:
- 创建名为SubstringOperation的项目。
- 添加名为SubstringForm的JFrame Form。
- 添加一个标签并用“一个句子”更改文本,然后添加一个具有以下变量名的文本字段:txtSentence。
- 要显示子字符串操作的结果,请添加两个具有以下变量名称的文本字段:txtOutput1和txtOutput2。
- 此外,添加一个将用作Form窗口标题的标签,并使用“字符串截取”更改文本。
- 添加一个变量名为DisplayButton的按钮,并将文本更改为“截取”。
这是应用程序首次运行时的显示
“截取”按钮事件的代码。
- private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
- //TODO add your handling code here;
- String sentence = jTextPane2.getText();
- String ouput1 = sentence.substring(4);
- String ouput2 = sentence.substring(3,8);
- jTextPane3.setText(ouput1);
- jTextPane4.setText(ouput2);
- }
这是单击“截取”按钮时的应用程序显示
从上面的应用程序显示中,我们可以看到使用substring()函数执行字符串分离操作的结果。这句话sentence.substring(4)用于从第5个字符到结尾访问存储在sentence变量中的字符串。还有这句话sentence.substring(3,10)用于访问从第4个字符到第10个字符的字符串。
访问字符串中的字符时要记住的是字符的索引位置。字符串上的索引位置从0开始,因此,当我们希望使用substring()函数访问或显示从第5个字符到结尾的字符串时,可以使用第4行的代码。以及第5行的代码,其中substring()函数传递两个参数3和10,这意味着该函数将访问索引3到索引9处的字符。
5. 案例2.17——动态字符截取器
本例将显示如何使用substring()函数从字符串中分离或访问某些字符,其中字符的索引位置将动态确定。在这种情况下,程序会要求用户输入一个句子,然后还会要求用户输入要访问的字符的第一个索引和最后一个索引的位置。单击“Display”按钮时,子字符串操作的结果将显示在列表中。
以下是制作此应用程序的步骤:
- 名称SubstringOperation2创建项目。、
- 加名为SubstringForm2的JFrame Form。
- 添加一个带有文本“一个句子”的标签,然后添加一个带有变量名txtSentence的文本字段。
- 添加两个带有以下文本的标签:“第一个字符索引”和“最后一个字符索引”。然后添加两个具有以下变量名的文本字段:txtFirstIndex和txtLastIndex。
- 显示结果,请添加一个变量名为IistOutput的列表。
- 此外,添加一个将用作Form窗口标题的标签,并使用“动态字符串截取器”更改文本。
- 添加一个变量名为DisplayButton的按钮,并将文本更改为“截取”。
这是应用程序首次运行时的显示
在为“截取”按钮创建事件之前,需要做的是导入vector类,该类将用于在列表框中显示子字符串分隔的结果。下面是导入vector类的代码:
import java.util.Vector;
下一步是从Vector类创建一个对象,该对象将用于存储子字符串操作的结果:
Vector data = new Vector();
Vector对象是全局声明的,因此在本例中,data是全局变量。下一步是为“截取”按钮创建一个事件。下面是“截取”按钮的事件:
- private void DisplayButtonActionPerformed(java.awt.event.ActionEvent evt) {
- //TODO add your handling code here;
- String sentence = txtSentence.getText();
- int firstindex = Integer.parseInt(txtFirstIndex.getText());
- int lastindex = Integer.parseInt(txtLastIndex.getText());
- String output = sentence.substring(firstindex,lastindex);
- data.add(output.toUpperCase()+"<—->从第一个索引"+firstindex+" 到最后一个索引"+lastindex+"\r");
- IistOutput.setListData(data);
- }
下面是截取操作完成时的应用程序显示