框架集合练习题

写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。

程序运行效果如图:


(1)代码

[java]  view plain  copy
  1. Student.java  
  2.   
  3. public class Student implements Comparable {  
  4.     String name;  
  5.     int score;  
  6.     Student(String name,int score){  
  7.         this.name=name;  
  8.         this.score=score;  
  9.     }  
  10.     public String getName() {  
  11.         return name;  
  12.     }  
  13.     public int getScore() {  
  14.         return score;  
  15.     }  
  16.     //按学生成绩进行排序  
  17.     public int compareTo(Object b) {  
  18.         Student st=(Student)b;  
  19.         int m=this.score-st.score;  
  20.         //保证成绩相等时也能在文本区中显示  
  21.         if(m==0)   
  22.             return 1;  
  23.         else return m;  
  24.     }  
  25.   
  26. }  
[java]  view plain  copy
  1. MyFrame.java  
[java]  view plain  copy
  1. import java.awt.BorderLayout;  
  2. import java.awt.event.*;  
  3. import java.util.*;  
  4.   
  5. import javax.swing.*;  
  6.   
  7. public class MyFrame extends JFrame implements ActionListener{  
  8.     //TreeSet泛型集合对象  
  9.     TreeSet<Student> t;  
  10.     //姓名文本框  
  11.     JTextField text1;  
  12.     //成绩 文本框  
  13.     JTextField text2;  
  14.     // 确认按钮  
  15.     JButton button;  
  16.     //文本区  
  17.     JTextArea area;  
  18.   
  19.     MyFrame(){  
  20.         init();  
  21.         setVisible(true);  
  22.         setDefaultCloseOperation(this.EXIT_ON_CLOSE);  
  23.     }  
  24.     void init() {  
  25.         //TreeSet集合对象  
  26.         t=new TreeSet<Student>();  
  27.         //创建 姓名 标签  
  28.         JLabel label1=new JLabel("姓名");  
  29.         //姓名文本框  
  30.         text1=new JTextField(10);  
  31.         //创建 成绩标签  
  32.         JLabel label2=new JLabel("成绩");  
  33.         //成绩 文本框  
  34.         text2=new JTextField(10);  
  35.         // 确认按钮  
  36.         button=new JButton("确定");  
  37.         //文本区  
  38.         area=new JTextArea(20,30);  
  39.         //创建面板,把上面的组件添加到面板  
  40.         JPanel panel=new JPanel();  
  41.         panel.add(label1);  
  42.         panel.add(text1);  
  43.         panel.add(label2);  
  44.         panel.add(text2);  
  45.         panel.add(button);  
  46.         //添加到窗口  
  47.         add(panel,BorderLayout.NORTH);  
  48.         add(area,BorderLayout.CENTER);  
  49.         //给第一个文本框text1 添加监听器  
  50.         text1.addActionListener(this);  
  51.         //给第二个文本框text1 添加监听器  
  52.         text2.addActionListener(this);  
  53.         //给button按钮添加监视器  
  54.         button.addActionListener(this);  
  55.           
  56.     }  
  57.     //重写actionPerformed方法  
  58.     public void actionPerformed(ActionEvent e) {  
  59.         String name=text1.getText();  
  60.         int score=0;  
  61.         try{  
  62.             //通过Integer.parseInt,把字符串类型转换为整型的数字  
  63.              score=Integer.parseInt(text2.getText());  
  64.              //如果输入的名字合法,添加到集合t中,再调用show方法,将集合t的内容显示在文本区中  
  65.              if(name.length()>0) {  
  66.                  Student s=new Student(name,score);  
  67.                  t.add(s);  
  68.                  show(t);  
  69.              }  
  70.         }catch(NumberFormatException exp) { //数字格式异常  
  71.              text2.setText("请输入正确的字符");  
  72.          }  
  73.           
  74.     }  
  75.     public void show(TreeSet<Student> tr) {  
  76.         //每次调用show方法,先把文本区中的内容清空  
  77.         area.setText(null);  
  78.         //获取迭代器it  
  79.         Iterator<Student> it=tr.iterator();  
  80.         while(it.hasNext()) {  
  81.             Student s=(Student)it.next();  
  82.             //将学生的信息显示在文本区中  
  83.             area.append("姓名:"+s.getName()+"   成绩:"+s.getScore()+"\n");  
  84.         }  
  85.     }  
  86.   
  87.   
  88. }  
[java]  view plain  copy
  1. Text.java  
  2.   
  3.   
  4. public class Text {  
  5.   
  6.     public static void main(String args[]){  
  7.         //创建MyFrame对象  
  8.         MyFrame win=new MyFrame();  
  9.         win.setBounds(100100400400);  
  10.     }  
  11.   
  12. }  

(2)运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值