常用实用类、组件与事件处理 本案例使用GUI设计,
案例要求:
(1)采取GUI设计思想实现一个歌手计分系统,系统功能要求:用户在窗口依次输入7个分数,去掉一个最高分和最低分,剩下的分数算出的平均分就是该歌手的最终分数。
(2)实现桌面形成软件,一个简单的成绩判断系统的程序软件。
package Try;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
//主类
public class Gui {
public static void main (String [] args) {
WindowOperation win = new WindowOperation();
win.setBounds(100, 100, 390, 360); //窗口界面
win.setTitle("歌手评分系统"); //窗口标题
}
}
//参考课本239页---注册事件源????????????????
class WindowOperation extends JFrame{
//-----有如下组件----
//窗口下有七个输入分数的框---
JTextField inputNo1,inputNo2,inputNo3,inputNo4,inputNo5,inputNo6,inputNo7;
//类似于控制台的输出文本框,用来输出分数
JTextArea textShow;
//JComboBox choiceFuhao----这个不需要使用,属于下拉列表选项
JComboBox defaultCharacter; //下拉列表的默认内容
//点击---确定---的按钮
JButton button;
//监视ItemEvent 事件的监视器 对应的监视器的类 对象名 ;
OperatorListener operator;
//监视ActionEvent 事件的监视器 对应的监视器的类 对象名 ;
ComputerListener computer;
//窗口的打开和关闭方式
public WindowOperation() {//重写构造方法,初始化对象
init(); //窗口内容
setVisible(true); //窗口可视化
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口退出程序
}
void init () {
setLayout(new FlowLayout());//布局方式----流式布局方式
//字符宽度为 5
inputNo1 = new JTextField(5);
inputNo2 = new JTextField(5);
inputNo3 = new JTextField(5);
inputNo4 = new JTextField(5);
inputNo5 = new JTextField(5);
inputNo6 = new JTextField(5);
inputNo7 = new JTextField(5);
//choiceFuhao = new JComboBox //列表中默认的内容--这里不需要使用
defaultCharacter = new JComboBox(); //列表中默认的内容为空
button =new JButton ("最终成绩");//最终成绩的
defaultCharacter.addItem("去掉最高分和最低分");//列表中默认的内容
textShow = new JTextArea (9,30); //文本框大小
operator = new OperatorListener();//监视器
computer = new ComputerListener();
operator.setJComboBox(defaultCharacter);
operator.setWorkTogether(computer);
//setJTextFieldOne----自定义方法---把用户输入的内容传递过来
computer.setJTextFieldOne(inputNo1);
computer.setJTextFieldTwo(inputNo2);
computer.setJTextFieldThree(inputNo3);
computer.setJTextFieldFour(inputNo4);
computer.setJTextFieldFive(inputNo5);
computer.setJTextFieldSix(inputNo6);
computer.setJTextFieldSeven(inputNo7);
computer.setJTextArea(textShow);
defaultCharacter.addItemListener(operator);//监听什么地方
//defaultCharacter---事件源 ,operator----监视器
button.addActionListener(computer);
//button---事件源 ,computer----监视器
add(inputNo1);
add(inputNo2);
add(inputNo3);
add(inputNo4);
add(inputNo5);
add(inputNo6);
add(inputNo7);
add(defaultCharacter);
add(button);
add(new JScrollPane(textShow));//创建文本区对象,添加滚动条
}
}
//监视器,获取事件源是否被操作
class OperatorListener implements ItemListener{
//OperatorListener类实现ItemListener接口
JComboBox choice;
ComputerListener workTogether;
public void setJComboBox(JComboBox box) {//重写接口方法
choice = box;
}
public void setWorkTogether(ComputerListener computer) {
workTogether = computer;
}
public void itemStateChanged(ItemEvent e) {
String character = choice.getSelectedItem().toString();
workTogether.setCharacter(character);//-------
}
}
class ComputerListener implements ActionListener{
JTextField inputNo1,inputNo2,inputNo3,inputNo4,inputNo5,inputNo6,inputNo7;
JTextArea textShow;
String character;
public void setJTextFieldOne(JTextField t) {
inputNo1 = t;
}
public void setJTextFieldTwo(JTextField t) {
inputNo2 = t;
}
public void setJTextFieldThree(JTextField t) {
inputNo3 = t;
}
public void setJTextFieldFour(JTextField t) {
inputNo4 = t;
}
public void setJTextFieldFive(JTextField t) {
inputNo5 = t;
}
public void setJTextFieldSix(JTextField t) {
inputNo6 = t;
}
public void setJTextFieldSeven(JTextField t) {
inputNo7 = t;
}
public void setJTextArea(JTextArea area) {
textShow = area;
}
public void setCharacter(String s) {
character = s;
}
//做一个方法实现计算过程
public void actionPerformed (ActionEvent e) {
try {
/*
double No1 = Double.parseDouble(inputNo1.getText());
double No2 = Double.parseDouble(inputNo2.getText());
double No3 = Double.parseDouble(inputNo3.getText());
double No4 = Double.parseDouble(inputNo4.getText());
double No5 = Double.parseDouble(inputNo5.getText());
double No6 = Double.parseDouble(inputNo6.getText());
double No7 = Double.parseDouble(inputNo7.getText());
double result = 0.0,max = 0.0,min=0.0;
if(No1<No2) {
max = No1;
}
*/
double []num = new double [7];
num[0] = Double.parseDouble(inputNo1.getText());
num[1] = Double.parseDouble(inputNo2.getText());
num[2] = Double.parseDouble(inputNo3.getText());
num[3] = Double.parseDouble(inputNo4.getText());
num[4] = Double.parseDouble(inputNo5.getText());
num[5] = Double.parseDouble(inputNo6.getText());
num[6] = Double.parseDouble(inputNo7.getText());
double result=0,min=10.0,max=0;
for(int i=0;i<7;i++) {
if(max<num[i])
max=num[i];
if(min>num[i])
min=num[i];
result=result+num[i];
}
textShow.append("去掉该歌手一个最高分"+max+"和一个最低分"+min);
textShow.append("最终得分:"+result/5+"\n");
}
catch(Exception ex) {//捕抓异常
textShow.append("\n请输入正确的数字字符\n");
}
}
}
实验效果:
(2)桌面单独程序可视化操作:
点next
继续next
next
然后选择主类:操作见下图
点 finish
提示:
一般来说,规范的写法:一个工程只有一个主类,当我们创建桌面的程序软件时,需要自己选主类到Browse当中。
出现警告不用理会。
点ok即可创建完成。
如图,打开后这样表示成功做出了一个简单的软件程序。