当前位置:课程学习>>第八章 图形界面程序设计>>实践活动
同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?
实践主题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;
}
}