java实验六 组件与事件处理 (无脑实验系列)_java中pcenter添加组件labelday[i]。-程序员宅基地

技术标签: java  实验六  组件与事件处理  

1.算术测试。

²  实验要求:

编写一个算书测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。

package lzy;

public class MainClass
{ public static void main(String args[])
  {
      ComputerFrame frame;
      frame=new ComputerFrame("算术测试 ");//创建窗口,其标题为:算术测试
  }
}

package lzy;

import java.awt.*;
import java.awt.event.*;
public class ComputerFrame extends Frame implements ActionListener
{
    TextField textOne,textTwo,textResult;
   Button getProblem,giveAnwser;
   Label operatorLabel,message;
   Teacher teacher;
   ComputerFrame(String s)
    { super(s);
      teacher=new Teacher();
      setLayout(new FlowLayout());
      textOne=new TextField(10);     //创建textOne,其可见字符长是10
      textTwo=new TextField(10);    //创建textTwo,其可见字符长是10
      textResult=new TextField(10);  //创建textResult,其可见字符长是10
      operatorLabel=new Label("+");
      message=new Label("你还没有回答呢");
      getProblem=new Button("获取题目");
      giveAnwser=new Button("确认答案");
      add(getProblem);
      add(textOne);
      add(operatorLabel);
      add(textTwo);
      add(new Label("="));
      add(textResult);
      add(giveAnwser);
      add(message);
      textResult.requestFocus();
      textOne.setEditable(false);
      textTwo.setEditable(false);
    getProblem.addActionListener(this); //将当前窗口注册为getProblem的ActionEvent事件监视器
    giveAnwser.addActionListener(this);  //将当前窗口注册为giveAnwser的ActionEvent事件监视器
      textResult.addActionListener(this); //将当前窗口注册为textResult的ActionEvent事件监视器
      setBounds(100,100,450,100);
      setVisible(true);
      validate();
      addWindowListener(new WindowAdapter()
                        {  public void windowClosing(WindowEvent e)
                           {  System.exit(0);
                           }
                        }
                       );
    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==getProblem) //判断事件源是否是getProblem
       {
            int number1=teacher.giveNumberOne(100);
         int number2=teacher.giveNumberTwo(100);
         String operator = teacher.giveOperator();
         textOne.setText(""+number1);
         textTwo.setText(""+number2);
         operatorLabel.setText(operator);
         message.setText("请回答");
textResult.setText(null);
       }
     if(e.getSource()==giveAnwser) //判断事件源是否是giveAnwser
       {  String answer=textResult.getText();
          try{
               int result=Integer.parseInt(answer);
               if(teacher.getRight(result)==true)
               {  message.setText("你回答正确");
               }
               else
               { message.setText("你回答错误");
               }
             }
          catch(NumberFormatException ex)
             {  message.setText("请输入数字字符");
             }
       }
      textResult.requestFocus();
      validate();
   }
}

package lzy;

public class Teacher
{
    int numberOne,numberTwo;
   String operator="";
   boolean right;
   public int giveNumberOne(int n)
   {
       numberOne=(int)(Math.random()*n)+1;
      return numberOne;
   }
   public int giveNumberTwo(int n)
   {
       numberTwo=(int)(Math.random()*n)+1;
      return numberTwo;
   }
   public String giveOperator()
   {
       double d=Math.random();
      if(d>=0.5)
         operator="+";
      else
         operator="-";
      return operator;
   }
   public boolean getRight(int answer)
   {
       if(operator.equals("+"))
       {
           if(answer==numberOne+numberTwo)
            right=true;
          else
            right=false;
       }
      else if(operator.equals("-"))
       {
          if(answer==numberOne-numberTwo)
            right=true;
          else
            right=false;
       }
      return right;
   }
}

2.信号灯。

²  实验要求:

编写一个带有窗口的应用程序。在窗口的北面添加一个下拉列表,该下拉列表有“”、“”和“”三个选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。

package lzy;

public class SignalMainClass
{
	public static void main(String args[])
  { 
	 SignalFrame frame;
     frame=new SignalFrame() ; 
     frame.setTitle("信号灯");  
  }
}

package lzy;

import java.awt.*;
import java.awt.event.*;
public class SignalFrame extends Frame implements ItemListener 
{  
	
  Choice choice;
   SignalCanvas signal=null;
   String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";
   public SignalFrame()
   {  
	   choice= new Choice();      //创建choice
      choice.add(itemRed);             //创建choice添加itemRed
      choice.add(itemYellow);              //创建choice添加itemYellow 
      choice.add(itemGreen);              //创建choice添加itemGreen  
      choice.addItemListener(this);  //将当前窗口注册为choice的ItemEvent事件监视器
      add(choice,BorderLayout.NORTH);
      try{ 
    	  Class cs=Class.forName("SignalCanvas");
            signal=(SignalCanvas)cs.newInstance();
            add(signal,BorderLayout.CENTER);
          }
       catch(Exception e)
          { 
    	   add(new Label("您还没有编写SignalCanvas类"),BorderLayout.CENTER);
          } 
      setBounds(100,100,360,300);
      setVisible(true);
      validate();
      addWindowListener(new WindowAdapter()
                        {  public void windowClosing(WindowEvent e)
                           {  System.exit(0);
                           }
                        }
                       );
   }
  public void itemStateChanged(ItemEvent e)
   {  
	  String item= choice.getSelectedItem();  // choice返回被选中的条目
      int w=signal.getBounds().width;
      int h=signal.getBounds().height;
      int m=Math.min(w,h);
      signal.setRadius(m/6);
      if(item.equals(itemRed)) 
      {
    	  if(signal!=null)
         { 
    		  signal.setRed(1);
           signal.setYellow(0);
           signal.setGreen(0);
           signal.setPosition(w/3,0);
           signal.repaint();
         }
      }
     else if(item.equals(itemYellow))
      { 
    	 if(signal!=null)
         {
    		 signal.setRed(0);
           signal.setYellow(1);
           signal.setGreen(0);
           signal.setPosition(w/3,h/3);
           signal.repaint();
         }  
      }
     else if(item.equals(itemGreen)) 
      { 
    	 if(signal!=null)
         { 
    		 signal.setRed(0);
           signal.setYellow(0);
           signal.setGreen(1);
           signal.setPosition(w/3,2*h/3);
           signal.repaint();
         }
      }
   }
}

package lzy;

import java.awt.*;
public class SignalCanvas extends Canvas 
{  
	
	int red,green,yellow,x,y,r;
   SignalCanvas()
   {  
	   setBackground(Color.white);
   }
   public void setRed(int r)
   {  
	   red=r;
   }
   public void setGreen(int g)
   {  
	   green=g;
   }
   public void setYellow(int y)
   {   yellow=y;
   }
   public void setPosition(int x,int y)
   { 
	   this.x=x;
      this.y=y;
   }
   public void setRadius(int r)
   {  
	   this.r=r;
   }
   public void paint(Graphics g)
   { 
	   if(red==1)
       { 
	   g.setColor(Color.red);
       }
      else if(green==1)      
       { 
    	  g.setColor(Color.green);   
       }
     else if(yellow==1)
       {  
    	 g.setColor(Color.yellow);   
       }
      g.fillOval(x,y,2*r,2*r);
   }
}

3.布局与日历。

²  实验要求:

编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。

package lzy;

public class CalendarMainClass
{ 
	public static void main(String args[])
  {   
	CalendarFrame frame=new CalendarFrame();
      frame.setBounds(100,100,360,300);
      frame.setVisible(true);
      frame.validate();
      frame.addWindowListener(new java.awt.event.WindowAdapter()
      { 
    	  public void windowClosing(java.awt.event.WindowEvent e)
          { 
    		  System.exit(0);
              }
                               }
          );
  }
}
package lzy;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class CalendarFrame extends Frame implements ActionListener
{   
	Label labelDay[]=new Label[42];
     Button titleName[]=new Button[7];
     String name[]={"日","一","二","三", "四","五","六"};
     Button nextMonth,previousMonth;
     int year=2006,month=10;
     CalendarBean calendar;
     Label showMessage=new Label("",Label.CENTER);
     public CalendarFrame()
     {  
    	 Panel pCenter=new Panel();
          pCenter.setLayout(new GridLayout(7,7));//将pCenter的布局设置为7行7列的GridLayout 布局。
        for(int i=0;i<7;i++)
        { 
        	titleName[i]=new Button(name[i]);
        	pCenter.add(titleName[i]); //pCenter添加组件titleName[i]。
        }
        for(int i=0;i<42;i++)
        {
           labelDay[i]=new Label("",Label.CENTER);
           pCenter.add(labelDay[i]);   //pCenter添加组件labelDay[i]。
        }
        calendar=new  CalendarBean();
        calendar.setYear(year);
        calendar.setMonth(month);
        String day[]=calendar.getCalendar();
        for(int i=0;i<42;i++)
        {  
        	labelDay[i].setText(day[i]);
        }
        nextMonth=new Button("下月");
        previousMonth=new Button("上月");
        nextMonth.addActionListener(this);
        previousMonth.addActionListener(this);
        Panel pNorth=new Panel(),
              pSouth=new Panel();
        pNorth.add(previousMonth);
        pNorth.add(nextMonth);
        pSouth.add(showMessage);
        showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" );
        ScrollPane scrollPane=new ScrollPane();
        scrollPane.add(pCenter);
        add(scrollPane,BorderLayout.CENTER); // 窗口添加scrollPane在中心区域 
        add(pNorth,BorderLayout.NORTH);   //  窗口添加pNorth 在北面区域
        add(pSouth,BorderLayout.SOUTH); // 窗口添加pSouth 在南区域。
     }
     public void actionPerformed(ActionEvent e)
     { 
    	 if(e.getSource()==nextMonth)
        { 
    		 month=month+1;
          if(month>12)
              month=1;
          calendar.setMonth(month);
          String day[]=calendar.getCalendar();
          for(int i=0;i<42;i++)
           { 
        	  labelDay[i].setText(day[i]);
           }
        }
       else if(e.getSource()==previousMonth)
        {
    	   month=month-1;
          if(month<1)
              month=12;
          calendar.setMonth(month);
          String day[]=calendar.getCalendar();
           for(int i=0;i<42;i++)
           {  
        	   labelDay[i].setText(day[i]);
           }
        }
       showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );
     }
}


package lzy;

import java.util.Calendar;
public class CalendarBean 
 {  
   String  day[];
   int year=2005,month=0;
   public void setYear(int year)
   {    this.year=year;
   }
   public int getYear()
   {    return year; 
   }
   public void setMonth(int month)
   {    this.month=month;
   }
   public int getMonth()
   {    return month; 
   }
   public String[] getCalendar()
   {   String a[]=new String[42];     
       Calendar 日历=Calendar.getInstance();
       日历.set(year,month-1,1);             
       int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
       int day=0;
      if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
       {  day=31;
       } 
     if(month==4||month==6||month==9||month==11)
       {  day=30;
       }
     if(month==2)
      {  if(((year%4==0)&&(year%100!=0))||(year%400==0))
           {   day=29;
           }
         else
           {   day=28;
           }
      }
     for(int i=星期几,n=1;i<星期几+day;i++)
      { 
         a[i]=String.valueOf(n) ;
         n++;
      }  
      return a;
   } 
}




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liangzhaoyang1/article/details/51479188

智能推荐

关于Linux下root密码的问题-程序员宅基地

文章浏览阅读95次。 这几天看到一个同学进不去他的Linux下的root权限,su root的时候让他敲root的密码他自己都不知道。貌似这个密码是当时装Linux的时候设的,如果自己当时不设一下的话,系统就会自动给随机一个密码给你。据说是为了安全性。那他怎么获得他的root权限呢?sudo固然可以短暂获得,但那终究是扬汤止沸。下面介绍一下做法。sudo passwd root 然后输入自己的密码,...

openstack调整实例大小_openstack 调整实例大小-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏11次。新建实例类型2C-4G-20G修改controller和各个computer节点的nova.cnf文件vim /etc/nova/nova.conf[DEFAULT]allow_resize_to_same_host=Truescheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,Serv_openstack 调整实例大小

java笔试面试总结_java 笔试减少去同一地方的次数-程序员宅基地

文章浏览阅读382次。java笔试面试总结java基础基础多线程虚拟机数据库Spring网络dubbojava基础基础Object类常用的方法有哪些?wait:final方法,无法被重写。作用:阻塞当前线程,且当前线程必须拥有此对象的monitor(即锁)notify:final方法,无法被重写。作用:唤醒一个正在等待该对象monitor的线程。如果有多个线程都在等待该对象的monitor,只唤醒一个n..._java 笔试减少去同一地方的次数

STP,RSTP,MSTP学习_mstp 名词定义 bid pid-程序员宅基地

文章浏览阅读666次。转载至华为官方技术文档,只做笔记参考,不作它用。定义以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出生成树协议STP(Spanning Tree Protocol)。与众多协议的发展过程一样,生成树协议也是随着网..._mstp 名词定义 bid pid

Centos7.4网卡配置_centos7.4配置网卡-程序员宅基地

文章浏览阅读1.2k次。Centos7.4网卡配置1、Linux操作系统安装完毕,那接下来如何让Linux操作系统能上外网呢?如下为Linux服务器配置IP的方法。Linux服务器网卡默认配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一块网卡,eth1表示第二块网卡,依次类推。修改服务器网卡IP地址命令为vi /etc/sysconfig/network-scripts/ifcfg-eth0 (注CentOS7网卡名i_centos7.4配置网卡

windows curl 之 invalid character ‘\‘‘ looking for beginning of value_urllib content:{"describe":"invalid character 'p' -程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏3次。windows terminal 执行 curl 报 invalid character '\" looking for beginning of value_urllib content:{"describe":"invalid character 'p' looking for beginning of v

随便推点

freeswitch mrcp 源码分析--数据接收(下)_freeswitch 对接腾讯云mrcp-程序员宅基地

文章浏览阅读3.3k次。在前两篇我们介绍了mrcp接收后的处理,最后会调用apr_queue_push扔到消息队列里面。 对应的,在apt_consumer_task.apt_consumer_task_run()中会循环调用pr_queue.apr_queue_pop()从队列里面取出数据:apt_consumer_task.apt_consumer_task_run –> apr_queue.apr_queue_p_freeswitch 对接腾讯云mrcp

数据库SQLite常用语句<三>_sqlite数据库 in 语句-程序员宅基地

文章浏览阅读335次。**一、数据库表的操作:** 1. 创建数据库表创建数据库:create table 表名( _id integer primary key autoincrement,//主键id自增长 name varchar(40), age integer(20), birthday datetime //最后一行不用写 逗号(,)_sqlite数据库 in 语句

zeppelin k8s安装部署和基本使用教程(在线的分析工具)_zeppelin 容器化部署-程序员宅基地

文章浏览阅读1.5k次。官网地址: http://zeppelin.apache.org/docs/0.8.1/简介:Zeppelin是一个Apache的孵化项目.一个基于web的笔记本,支持交互式数据分析。你可以用SQL、Scala等做出数据驱动的、交互、协作的文档。(类似于ipython notebook,可以直接在浏览器中写代码、笔记并共享)多用途笔记本可实现你所需要的:数据采集数据发现数据分析..._zeppelin 容器化部署

Ubuntu16.04下opencv4.0+opencv_contrib4.0(nonfree)安装及配置_opencv 4 initmodule_nonfree-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏18次。Ubuntu16.04下opencv4.0+opencv_contrib4.0安装及配置一. OpenCV 以及OpenCV_contrib的安装1.下载并解压 OpenCV-4.0.0及OpenCV_contrib-4.0.0源码至同一个文件夹。2.因为之前安装过Opencv3.4,我们将OpenCV的prefix目录安装在/usr/local/opencv4.0.0,在终端进入至Open..._opencv 4 initmodule_nonfree

Laravel 中 validation 验证 返回中文提示 全局设置-程序员宅基地

文章浏览阅读1.5k次。<?phpreturn [/*|--------------------------------------------------------------------------| Validation Language Lines|----------------------------------------------------------..._laravel validator 全局custommessage

2018年计算机考研408操作系统真题(客观题)_多任务操作系统具有并发和并行的特点-程序员宅基地

文章浏览阅读2w次,点赞21次,收藏157次。1、下列关于多任务操作系统的叙述中,正确的是Ⅰ. 具有并发和并行的特点Ⅱ. 需要实现对共享资源的保护Ⅲ. 需要运行在多 CPU 的硬件平台上A. 仅ⅠB. 仅ⅡC. 仅Ⅰ、ⅡD.Ⅰ、Ⅱ、Ⅲ答案:C解析:多任务操作系统可以在同一时间内运行多个应用程序,即多任务操作系统具有并发和并行的特点,即 I 正确;多个任务必须互斥地访问共享资源,为达到这一目标必须对共享资源进行必要的保护,即 II 正确;现代操作系统都是多任务的,并不一定需要运行在多CPU的硬件上,单个CPU也可以满足要求,即 I_多任务操作系统具有并发和并行的特点

推荐文章

热门文章

相关标签