当前位置:课程学习>>第八章 图形界面程序设计>>实践活动




同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?

实践主题1:建立窗口

实践目标1:学习使用窗口。

实践任务1:按模板要求,将[代码]处替换为Java程序代码。

实践要求1:编写的程序中有一个窗口对象,该窗口有菜单条、菜单、菜单项。单击菜单项可以改变窗口的颜色、大小和位置,单击窗口的关闭图标可以结束程序的运行。

WindowExample.java

  import java.awt.*;

  import java.awt.event.*;

  class MyFrame extends Frame implements ActionListener {

    MenuBar bar=null;

    Menu menu=null;

    MenuItem itemRed,itemGreen;

    MyFrame(String s) {

      super(s);

      [代码1] //设置窗口的宽为200,高为300

      [代码2] //设置窗口的位置是(100,120)

      setVisible(true);

      bar=[代码3] //创建菜单条

      menu=[代码4] //创建菜单,名字为“选择”

      itemRed=[代码5] //创建菜单项,名字为“窗口为红色”

      itemGreen=[代码6] //创建菜单项,名字为“窗口为绿色”

      [代码7] //向menu添加itemRed

      [代码8] //向menu添加itemGreen

      [代码9] //向bar添加menu

      [代码10] //向窗口添加菜单条

      [代码11] //将当前窗口注册为itemRed的ActionEvent事件监视器

      [代码12] //将当前窗口注册为itemGreen的ActionEvent事件监视器

      addWindowListener(new WindowAdapter()

      {

        public void windowClosing(WindowEvent e) {

        [代码13] //结束程序的执行

        }

     }

  );

  validate();

}

public void actionPerformed(ActionEvent e) {

  if(e.getSource()==itemRed) {

    setBackground(Color.red);

    [代码14] //设置窗口的宽为200,高为200

    [代码15] //设置窗口的位置是(20,120)

 }

 else if(e.getSource()==itemGreen) {

    setBackground(Color.green);

    [代码16] //设置窗口的宽为100,高为160

    [代码17] //设置窗口的位置是(80,150)

    }

  }

}

public class WindowExample {

  public static void main(String[] args) {

     new MyFrame("窗口");

  }

}       

教师分析:

这个实践主要是加强对窗口类的掌握。参考代码如下:

setSize(200,300);             //[代码1]

setLocation(100,120);                    //[代码2]

bar=new MenuBar();                   //[代码3]

menu=new Menu("选择");                    //[代码4]

itemRed=new MenuItem("窗口为红色");      //[代码5]

itemGreen=new MenuItem("窗口为绿色");     //[代码6]

menu.add(itemRed);                    //[代码7]

menu.add(itemGreen);               //[代码8]

bar.add(menu);                     //[代码9]

setMenuBar(bar);                       //[代码10]

itemRed.addActionListener(this);             //[代码11]

itemGreen.addActionListener(this);          //[代码12]

System.exit(0);                       //[代码13]

setSize(200,200);                   //[代码14]

setLocation(20,120);                //[代码15]

setSize(100,160);                //[代码16]

setLocation(80,150);              //[代码17]

 

实践主题2:进度条

实践目标2:掌握JProgressBar类的用法。

实践任务2:按模板要求,将[代码]处替换为Java程序代码。

实践要求2:用进度条模拟显示线程的计算速度。一个线程用递归算法输出Fibinacci序列的前100项;另一个线程使用循环输出Fibinacci序列的前100项。

BarExample.java

  import javax.swing.*;

  import java.awt.*;

  import javax.swing.border.*;

  public class BarExample {

    public static void main(String[] args) {

      BarWin win=new BarWin();

      win.thread1.start();

      win.thread2.start();

    }

}

class BarWin extends JFrame implements Runnable {

  JProgressBar pbar1,pbar2;

  Thread thread1,thread2;

  JTextField text1,text2;

  BarWin() {

  pbar1=[代码1] //创建pbar1,平均分成100份

  pbar2=[代码2] //创建pbar2,平均分成100份

  [代码3] //设置pbar1用百分数或字符串来表示进度条的进度情况

  [代码4] //设置pbar2用百分数或字符串来表示进度条的进度情况

  text1=new JTextField(10);

  text2=new JTextField(10);

  thread1=new Thread(this);

  thread2=new Thread(this);

  Box boxV1=Box.createVerticalBox();

  boxV1.add(pbar1);

  boxV1.add(pbar2);

  Box boxV2=Box.createVerticalBox();

  boxV2.add(text1);

  boxV2.add(text2);

  Box baseBox=Box.createHorizontalBox();

  baseBox.add(boxV1);

  baseBox.add(boxV2);

  Container con=getContentPane();

  con.setLayout(new FlowLayout());

  con.add(baseBox);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  setBounds(10,10,300,300);

  setVisible(true);

  validate();

}

public void run() {

  if(Thread.currentThread() == thread1) {

    for( int i=1;i<=100; i++ ) {

      text1.setText("第"+i+"项="+f(i));

      [代码5] //设置pbar1填充的百分比为i%

      try {

        Thread.sleep(500);

      }

      catch(InterruptedException e) { }

      }

   }

   if(Thread.currentThread()==thread2) {

     long a1=1,a2=1,a=a1;

     int i=1;

     while(i<=100) {

     if(i>=3) {

     a=a1+a2;

     a1=a2;

     a2=a;

   }

    text2.setText("第"+i+"项="+a);

    [代码6] //设置pbar2填充的百分比为i%

    i++;

    try {

       Thread.sleep(400);

    }

    catch(InterruptedException e) { }

    }

  }

}

long f(int n) {

  long c=0;

  if(n==1 || n==2)

     c=1;

  else if(n>1)

     c=f(n-1)+f(n-2);

  return c;

  }

}          

教师分析:

这个实践主要是加强对JProgressBar类的掌握。参考代码如下: 

pbar1=new JProgressBar(0,100);     //[代码1]

pbar2=new JProgressBar(0,100);    //[代码2]

pbar1.setString((Integer.toString(pbar1.getValue()))+"%");         //[代码3]

pbar2.setString((Integer.toString(pbar2.getValue()))+"%");        //[代码4]

pbar1.setString((Integer.toString(i))+"%");     //[代码5]

pbar2.setString((Integer.toString(i))+"%");     //[代码6]

 

实践主题3:日历。

实践目标3:掌握JComboBox类的用法。。

实践要求3:编写一个Java应用程序,在程序中有一个下拉列表,该列表添加了代表年份的选项,当用户在列表中选择某项后,程序通过表格显示某年某月的日历。

教师分析:

这个实践主要是加强对JComboBox类的掌握。参考代码如下:

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class CalendarExample

  {

  public static void main(String[] args)

  {

     new GoodWindow();

  }

}

class GoodWindow extends JFrame implements ItemListener

{

  JComboBox list=null;

  CalendarPane calendarPane=null;

  Container con=null;

  GoodWindow()

  {

    list=new JComboBox();

    for (int i=2000;i<=2010;i++)

  {

    String temp=""+i;

    list.addItem(temp);

  }

  list.addItemListener(this);

  con=this.getContentPane();

  con.add(list,BorderLayout.NORTH);

  calendarPane=new CalendarPane(2006);

  con.add(calendarPane,BorderLayout.CENTER);

  etDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  setBounds(100,100,400,240);

  setVisible(true);

  validate();

  }

public void itemStateChanged(ItemEvent e)

{

  con.remove(calendarPane);

  String str=(String)list.getSelectedItem();

  int year=Integer.parseInt(str);

  calendarPane=new CalendarPane(year);

  con.add(calendarPane,BorderLayout.CENTER);

  con.validate();

  validate();

  }

}

class CalendarPane extends JPanel implements ActionListener

{

  JTable table;

  Object a[][]=new Object[6][7];

  Object name[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

  JButton nextMonth,previousMonth;

  int year=2006,month=1;

  CalendarBean calendar;

  JLabel showMessage=new JLabel("",JLabel.CENTER);

  public CalendarPane(int year)

  {

     setLayout(new BorderLayout());

     calendar=new CalendarBean();

     calendar.setYear(year);

     calendar.setMonth(month);

     String day[]=calendar.getCalendar();

     table=new JTable(a,name);

     table.setRowSelectionAllowed(false);

     setTable(day);

     nextMonth=new JButton("下月");

     previousMonth=new JButton("上月");

     nextMonth.addActionListener(this);

     previousMonth.addActionListener(this);

     JPanel pNorth=new JPanel(),pSouth=new JPanel();

     pNorth.add(previousMonth);

     pNorth.add(nextMonth);

     pSouth.add(showMessage);

     showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");

     add(new JScrollPane(table),BorderLayout.CENTER);

     add(pNorth,BorderLayout.NORTH);

     add(pSouth,BorderLayout.SOUTH);

     validate();

  }

public void actionPerformed(ActionEvent e)

  {

  if( e.getSource()==nextMonth )

  {

     month=month+1;

     if(month > 12)

     month=1;

     calendar.setMonth(month);

     String day[]=calendar.getCalendar();

     setTable(day);

     table.repaint();

  }

  else if ( e.getSource()==previousMonth )

  {

     month=month-1;

     if(month < 1)

     month=12;

     calendar.setMonth(month);

     String day[]=calendar.getCalendar();

     setTable(day);

     table.repaint();

  }

  showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");

  }

  public void setTable(String day[])

  {

     int n=0;

     for(int i=0;i<6;i++)

  {

  for(int j=0;j<7;j++)

  {

     a[i][j]=day[n];

     n++;

     }

   }

 }

}

class CalendarBean

{

  String day[];

  int year=2006,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;

   else 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;

  }

}

 

进入拓展资源