实验6JavaAWT及Swing应用_swing实验

2020-02-27 其他范文 下载本文

实验6JavaAWT及Swing应用由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“swing实验”。

实验6 Java AWT及Swing应用

实验内容

(1)按钮有序排列(2)密码验证问题

(3)名片录入管理界面设计(4)文字字体设计窗体

1、按钮有序排列

实验目的:(1)了解 GUI 的概念 ;

(2)了解 java.awt 包和 javax.swing 包, 以及比较它们具有的同性质的组件的异同;(3)掌握和运用 Java 的基本GUI 组件, 了解它们的特点。

实验任务:

本实验要求定义按钮若干让它们按照从左向右的顺序依次排列, 显示5个带图标的按钮。

实验步骤:

在 Eclipse 中新建一个 Chapter11项目 , 按照下列要求完成实验。练习: 调试和运行程序 ButtonCounter.java;

要求: 在当前项目Chapter11中, 新建一个文件ButtonCounter.java, 将程序清单3-1 中的程序输入并保存。该程序可以定义按钮若干使它们按照从左向右的顺序依次排列, 显示5个带图标的按钮 , 运行结果如图1所示。阅读和分析程序ButtonCounter.java, 调试编译并运行该程序。

图1 程序清单

3-1 ButtonCounter.java //ButtonCounter.java import javax.swing.*;import java.awt.*;

public cla ButtonCounter extends JFrame {

public ButtonCounter(){

super(“显示按钮窗口”);

ImageIcon Icon = new ImageIcon(“image/image.gif”);

JButton jbt1 = new JButton(“按钮”,Icon);

JButton jbt2 = new JButton(“按钮”,Icon);

JButton jbt3 = new JButton(“按钮”,Icon);

JButton jbt4 = new JButton(“按钮”,Icon);

JButton jbt5 = new JButton(“按钮”,Icon);

JPanel p1 = new JPanel();

p1.add(jbt1);

JPanel p2 = new JPanel();

p2.add(jbt2);

JPanel p3 = new JPanel();

p2.add(jbt3);

JPanel p4=new JPanel();

p4.add(jbt4);

JPanel p5=new JPanel();

p5.add(jbt5);

getContentPane().setLayout(new FlowLayout());

getContentPane().add(p1);

getContentPane().add(p2);

getContentPane().add(p3);

getContentPane().add(p4);

getContentPane().add(p5);

}

public static void main(String[] args){

// Create a frame and set its properties

JFrame frame = new ButtonCounter();

frame.pack();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

} } 思考

(1)在程序的 main()方法中有语句Frame.pack(), 该方法的作用是什么 ?

该方法的作用是自动确定Frame的大小。

(2)程序中语句Frame.setDefaultCloseOperation(JFrame.EXIT-ON-CLOSE);的作用是什么 ? 去掉该语句 , 程序会出现怎样的运行结果 ?

该语句的作用是使执行程序结束。去掉该语句,关闭窗口,但是命令提示符并没有正常结束。需要按Ctrl+C才行。

(3)如果将程序中的语句 getContentPane().setLayout(new FlowLayout());去掉 , 程序的运行结果会发生变化吗 ? 如果不发生变化是什么原因 ? 如果发生变化 , 会出现什么现象 ? 请解释原因。

程序的运行结果会发生变化,只出现一个按钮。因为去掉该语句后,布局管理器被取消了,只有调用每个组件的相关方法,才能为这些组件在容器中一一定位。

(4)如果将程序中的按钮组件 jbtl 换成 java.awt 包中的 Button 组件对象 , 换过后的组件和原来的 JButton 在外观上会出现什么不同 ?

颜色不同,Button 组件颜色是灰色,同JPanel相同。

注意 : 在使用 Eclipse 时 , 如果在运行的时候希望能调用一些图片 , 可以将图片放在定义该项目 Chapterll 下的目录 image 中 , 如果没有该目录 , 需要用户自己定义一个 image 目录。在编写程序的时候 , 就可以通过相对路径 “image/xxx.gif“ 等形式装载图片。

2、密码验证问题

实验目的 :

(l)进一步了解和掌握 javax.swing 包中的常用 GUI 组件;

(2)比较 Swing 包中的 JTextField 和 JPawordField 在使用中的异同;

(3)初步了解和运用事件处理机制和 Action 事件的处理。

实验任务:

编写一个 Java 程序 , 实现用户根据自己的密码进入界面, 如果用户输入信息正确 , 则输出 “ 欢迎×××u29992X户 ”, 否则用户还可以尝试两次 , 如果尝试阶段输入信息错误, 则输出 “ 请输入正确的信息 ”, 如果尝试失败 , 用户则退出。

实验步骤 :

打开 Eclipse, 打开一个已有项目如 Chapter3, 在该项目下完成如下练习。

练习: 密码验证

要求: 在当前项目如Chapter3下, 新建一个文件PawordVerification.java, 将程序清单 3-2 中的程序输入并保存。要求该程序完成如下功能 : 用户根据自己的密码进入界面 , 如果用户输入信息正确 , 则输出 “ 欢迎××× ”, 否则用户还可以尝试两次 , 如果尝试阶段输入信息错误 , 则输出 “请输入正确的信息” , 如果尝试失败 , 用户则退出。调试并编译程序 PawordVerification.java, 运行该程序 , 运行结果如图2、图 3和图 4所示 , 请将该程序中的代码1~代码7补充完整。

图2

图3 3

图4 程序清单 3-2 PawordVerification.java //PawordVerification.java import javax.swing.*;import java.awt.event.*;

import java.awt.*;public cla PawordVerification extends JFrame implements ActionListener{ JLabel userLabel;//定义用户标签提示

JLabel pawordLabel;//定义密码标签提示

JTextField userText;//定义用户文本框

JPawordField pawordText;//定义密码文本框

int count=1;//统计输入信息的次数

public PawordVerification(){ super(”请输入信息“);

Container container=getContentPane();//得到容器对象container;

container.setLayout(new FlowLayout());//设置默认布局

userLabel=new JLabel(”用户名“);//创建用户标签

pawordLabel=new JLabel(”密 码“);//创建密码标签

userText=new JTextField();//创建用户文本输入框

pawordText=new JPawordField();//创建密码输入文本框

pawordText.addActionListener(this);//注册事件监听者;container.add(userLabel);container.add(userText);container.add(pawordLabel);container.add(pawordText);setSize(240,100);setVisible(true);

}

public void actionPerformed(ActionEvent e){//事件处理

String userName=new String(”陈三“);//假设为正确的用户名;String paword=new String(”12345678“);//假设为正确的密码;

if(e.getSource()==pawordText){ count++;

char[] pawords=pawordText.getPaword();

if(userText.getText().equals(userName)&&paword.equals(new String(pawords))){

JOptionPane.showMeageDialog(null, ”欢迎您:“ + userName);

System.exit(0);

}

else if(count>3)System.exit(0);else{

JOptionPane.showMeageDialog(null,userText.getText()+”请输入正确信息“);} } }

public static void main(String args[]){

PawordVerification pv=new PawordVerification();pv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

} 思考

(1)程序 PawordVerification.java 中第 3 行语句 java.awt.* 的作用是什么 ? 引入java.awt包中所有的类。

(2)程序 actionPerformed()方法中 if(e.getSource()==pawordText)的作用是什么 ? 如果去掉该条件判断 , 程序运行结果会发生什么变化 ?

该语句的作用是判断事件源是否为pawordText。去掉该条件判断,程序运行结果无变化。(3)观察程序actionperformed()方法中语句”char[]pawords =pawordText.getPaword();“的作用是什么 ?

从密码文本框获取密码,并将其存入pawords数组中。

(4)观 察 程 序 中 定 义 的main()方 法, 如 果 在PawordVerification pv=new pawordverification();语句后 , 添加语句 System.exit(0), 会出现什么问题 , 为什么 ?

程序被终止运行,因为该语句的作用是终止当前正在运行的 Java 虚拟机。

(5)从给定程序的运行结果看 , 密码输入的回显字符是 ”*“, 如果把回显字符换成”#“, 该如何处理 ?

在构造函数中添加pawordText.setEchoChar('#');语句。

(6)如果要求在信息输入错误处理中 , 一旦输入完密码信息 , 用户输入框和密码输入框可以清空 , 请将上述程序修改 , 使之实现该功能。

在最后一个else中添加以下代码:userText.setText(”“);

pawordText.setText(”“);

3、名片录入管理界面设计

实验目的 :

(l)进一步了解和运用常用的 GUI 组件;

(2)深入了解和运用 5 种常用的布局管理 :FlowLayout、BorderLayout、CardLayout、GridLayout 和 GridBagLayout, 掌握 5 种布局管理的特点 , 并掌握一些常用组件容器的默认布局管理方式 :

(3)比较常用的布局管理方式的不同和使用的条件。

实验任务 :

设计一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓、工作单位、工作地 5

址、电话 1、电话 2、手机、传真、邮编等基本内容。本实验由下面两个练习组成。练习: 设计顺序排列的名片录入管理界面;实验步骤 :

打开 Eclipse, 打开一个项目如 Chapter3, 在该项目下完成如下练习。

练习

设计顺序排列的名片录入管理界面,本练习是考察用户对 FlowLayout 布局管理器的应用。

要求 : 在当前项目如 Chapter3下, 新建一个文件CardManager.java,将程序清单3-3中的程序输入并保存。通过一个CardManager.java文件 , 实现一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓(可以包括总裁、总经理、经理、主任、处长、院长、校长、科长、教授、博士等)、工作单位、工作地址、电话 1、电话 2、手机、传真、邮编等基本内容 , 用户选择确定按钮 , 表示输入 , 如果选择取消按钮 , 表示关闭窗口。运行结果可以如图5所示。观察运行结果 , 阅读和分析程序 CardManager.java,请将程序中代码1~代码7处补充完整。

图5 程序清单3-3 CardManager.java

import javax.swing.*;import java.awt.*;

import java.awt.event.*;

public cla CardManager extends JFrame{

JLabel nameLabel,sexLabel,titleLabel,unitLabel;

JLabel addreLabel,telLabel1,telLabel2,mobileLabel,faxLabel,emailLabel;JTextField nameTxt,unitTxt,addreTxt;JTextField telTxt1,telTxt2,mobileTxt,faxTxt,emailTxt;JRadioButton sexBtn1,sexBtn2;JComboBox titleBx;JButton okBtn,cancelBtn;public CardManager(){ super(”名片录入管理“);

Container c=getContentPane();

JPanel centerPanel=new JPanel();//输入面板

nameLabel=new JLabel(”姓名“);//定义姓名标签

nameTxt=new JTextField(10);//定义姓名文本输入框

centerPanel.add(nameLabel);centerPanel.add(nameTxt);

sexLabel=new JLabel(”性别“);//定义性别标签

sexBtn1=new JRadioButton(”男“);//定义性别单选按钮1 sexBtn2= new JRadioButton(”女“);//定义性别单选按钮2 ButtonGroup group=new ButtonGroup();group.add(sexBtn1);group.add(sexBtn2);centerPanel.add(sexLabel);centerPanel.add(sexBtn1);

centerPanel.add(sexBtn2);

titleLabel=new JLabel(”称谓“);//定义称谓标签

String title[]={”总裁“,”总经理“,”经理“,”主任“,”处长“,”院长“,”校长“,”科长“,”教授“,”讲师“};//定义称谓内容

titleBx=new JComboBox();//创建称谓文本输入框

titleBx.setMaximumRowCount(5);centerPanel.add(titleLabel);

centerPanel.add(titleBx);

unitLabel=new JLabel(”工作单位“);//定义工作单位标签

unitTxt=new JTextField(30);//定义工作单位输入框

centerPanel.add(unitLabel);centerPanel.add(unitTxt);

addreLabel=new JLabel(”工作地址“);//定义工作地址标签

addreTxt=new JTextField(30);//定义工作地址输入框

centerPanel.add(addreLabel);centerPanel.add(addreTxt);

telLabel1=new JLabel(”电话“);//定义电话1标签

telTxt1=new JTextField(15);//定义电话1输入框

centerPanel.add(telLabel1);centerPanel.add(telTxt1);

telLabel2=new JLabel(”电话“);//定义电话2标签

telTxt2=new JTextField(15);//定义电话2输入框

centerPanel.add(telLabel2);

centerPanel.add(telTxt2);

mobileLabel=new JLabel(”手机“);//定义手机标签

mobileTxt=new JTextField(15);//定义手机输入框

centerPanel.add(mobileLabel);

centerPanel.add(mobileTxt);

faxLabel=new JLabel(”传真“);//定义传真标签

faxTxt=new JTextField(15);//定义传真输入框

centerPanel.add(faxLabel);centerPanel.add(faxTxt);

emailLabel=new JLabel(”E-mail“);//定义email标签

emailTxt=new JTextField(32);//定义email输入框

centerPanel.add(emailLabel);centerPanel.add(emailTxt);

JPanel sPanel=new JPanel();//按钮面板

okBtn=new JButton(”确定“);//定义确定按钮

cancelBtn=new JButton(”取消“);//定义取消按钮

cancelBtn.addActionListener(new ActionListener(){//监视cancelBtn的动作

public void actionPerformed(ActionEvent e){

if(e.getSource()==cancelBtn){//判断事件源是否是cancelBtn;System.exit(0);} } });

sPanel.add(okBtn);

sPanel.add(cancelBtn);

c.setLayout(new BorderLayout());

c.add(centerPanel, BorderLayout.CENTER);//将centerPanel放置c中的中间位置;

c.add(sPanel, BorderLayout.SOUTH);//将sPanel 放置c中的南面的位置;

setSize(418,250);setVisible(true);

}

public static void main(String args[]){ CardManager cm=new CardManager();

cm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}

} 思考

(1)观察程序 CardManager()方法中的程序段 : ButtonGroup group=newButtonGroup();

group.add(sexBtnl);group.add(sexBtn2);

组件对象 group 的作用是什么 ? 如果将 group 去掉 , 程序的运行结果会发生什么变化? 为什么 ?

group 的作用是定义单选按钮控件组。如果将 group 去掉,添加的两个性别选择按钮可以同时选定,因为此时是向JFrame类中分别添加两个单选按钮,它们之间没有影响。(2)观察运行结果 , 如果将窗口的大小改变 , 运行结果会发生什么变化? 为什么?

窗口的大小改变时,组件的位置会变化,但组件的大小不改变。因为布局管理器为BorderLayout()。

4、文字字体设计窗体

实验目的 :

(1)进一步了解 Swing 包中的高级 GUI 组件;

(2)了解项目事件的处理以及匿名对象在事件处理中的应用;(3)了解和运用 Swing 包中的外观设置。

实验任务 :

设计一个文字字体设计窗体 , 在该窗体中可以设置要显示文字的字体内容 , 包括字体名称、字体大小、粗体和斜体等字体风格。

实验步骤 :

打开 Eclipse, 选择已有的项目如 Chapter3, 然后按照下列要求完成实验。

要求 : 在当前项目如 Chapter3.jpx 下 , 新建一个文件 ArtFont.java, 将程序清单3-4中的程序输入并保存。本练习的要求是设计一个字体设计的窗体 , 使用户可以根据选择 , 将字体按照字体名称、字体大小、粗体和斜体风格进行设置。阅读和分析程序清单 3-4中的 ArtFont.java, 将程序中程序段1~程序段4补充完成 , 并回答思考题。程序的运行结果如图6所示。

图6 程序清单3-4 ArtFont.java //ArtFont.java

import javax.swing.*;import java.awt.*;import java.awt.event.*;

public cla ArtFont extends JFrame implements ActionListener{

JComboBox fontType,fontSize;

JCheckBox boldBx;//粗体按钮

JCheckBox italicBx;//斜体按钮

JButton colorBtn;//颜色按钮;

String[] fontNames;//字体名称;

String[] fontSizes;//字体尺寸;

JLabel label;//输入提示标签;

JTextField inputText;//文字输入框;

JTextArea txtArea;//文字显示区;

JPanel fontPanel;//字体设置;

JPanel showPanel;//显示效果区

Font font;

int boldStyle,italicStyle,underlineStyle;

int fontSizeStyle;

String fontNameStyle;

Color colorStyle=Color.black;//设置字体的默认颜色为黑色;

public ArtFont(){

super(”字体设置“);

//设置默认字体

boldStyle=0;

italicStyle=0;

underlineStyle=0;

fontSizeStyle=10;

fontNameStyle=”宋体“;

font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);fontPanel=new JPanel();

fontPanel.setLayout(new FlowLayout());//设置字体名字

GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

fontNames=ge.getAvailableFontFamilyNames();//获得系统中所有字体的名字;

fontType=new JComboBox(fontNames);

fontType.setEditable(false);

fontType.setMaximumRowCount(10);

fontType.addItemListener(new ItemListener(){

public void itemStateChanged(ItemEvent e){ //实现监听字体名字改变的事件

int num = new Integer(fontSize.getSelectedItem().toString()).intValue();

font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);

txtArea.setFont(font);

}

});

//设置字体大小

fontSizes=new String[63];

for(int i=0;i

fontSizes[i]=Integer.toString((i+10));

}

fontSize=new JComboBox(fontSizes);

fontSize.setEditable(false);

fontSize.setMaximumRowCount(10);

fontSize.addItemListener(new ItemListener(){

public void itemStateChanged(ItemEvent e){ //实现监听字体大小改变的方法

int num = new Integer(fontSize.getSelectedItem().toString()).intValue();

font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);

txtArea.setFont(font);

}

});

//设置粗体选择按钮;

boldBx=new JCheckBox(”粗体“);

boldBx.addItemListener(new ItemListener(){

public void itemStateChanged(ItemEvent e){ //实现监听选择粗体状态改变的方法

int num = new Integer(fontSize.getSelectedItem().toString()).intValue();

if(italicBx.isSelected()&& boldBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);

txtArea.setFont(font);

} else if(boldBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);

txtArea.setFont(font);

}

}

});

//设置斜体选择按钮;

italicBx=new JCheckBox(”斜体“);

italicBx.addItemListener(new ItemListener(){

public void itemStateChanged(ItemEvent e){

//实现监听选择斜体状态改变的方法

int num = new Integer(fontSize.getSelectedItem().toString()).intValue();

if(italicBx.isSelected()&& boldBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);

txtArea.setFont(font);

} else if(italicBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);

txtArea.setFont(font);

}

}

});

//设置颜色选择;

colorBtn=new JButton(”颜色“);

colorBtn.addActionListener(this);

//设置字体面板;

fontPanel.add(fontType);

fontPanel.add(fontSize);

fontPanel.add(boldBx);fontPanel.add(italicBx);fontPanel.add(colorBtn);//设置输入提示标签

label=new JLabel(”输入“);

//设置文本输入框;

inputText=new JTextField(30);

inputText.addActionListener(this);

//设置文本显示区;

txtArea=new JTextArea(10,80);//20行80列;

txtArea.setFont(font);

//设置文本面板;

showPanel=new JPanel();

showPanel.add(label);

showPanel.add(inputText);

showPanel.setLayout(new FlowLayout());

showPanel.add(new JScrollPane(txtArea));

//设置容器;

Container container=getContentPane();

container.setLayout(new BorderLayout());

container.add(fontPanel,BorderLayout.NORTH);

container.add(showPanel,BorderLayout.CENTER);

setSize(500,300);

setVisible(true);

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==colorBtn){//改变颜色

colorStyle=JColorChooser.showDialog(this,”选择字体颜色",colorStyle);

colorBtn.setForeground(colorStyle);

txtArea.setForeground(colorStyle);

}

else if(e.getSource()==inputText){//将输入文字在文字显示区表示;

txtArea.setText(inputText.getText());

}

}

public static void main(String args[]){

ArtFont artFont=new ArtFont();

artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

} }

(1)程序可以编译正常、运行正常吗? 如果不能, 是因为什么原因 ? 程序可以编译正常、运行正常。

(2)如果将程序ArtFont.java中所有的匿名监听者改为this, 那么程序主要会做什么变动? 请写出。

将程序中fontType、fontSize、boldBx、italicBx的addItemListener方法中的参数new ItemListener()改为this,并将紧随其后的方法体去掉。再加入以下代码: public void itemStateChanged(ItemEvent e){

int num = new Integer(fontSize.getSelectedItem().toString()).intValue();

if(italicBx.isSelected()&& boldBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);

txtArea.setFont(font);

} else if(boldBx.isSelected()){

font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);

txtArea.setFont(font);

} else if(italicBx.isSelected()){

font= new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);

txtArea.setFont(font);

} else {

font= new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);

txtArea.setFont(font);

}

} 13

《实验6JavaAWT及Swing应用.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验6JavaAWT及Swing应用
点击下载文档
相关专题 swing实验 JavaAWT Swing swing实验 JavaAWT Swing
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文