Java--图形用户界面设计

一、实验项目要求

实验目的

1.熟悉AWT编写图形用户界面程序

2.熟悉AWT事件处理模型、AWT构件库

3.使用Swing编写图形用户界面程序

实验题目

1.形界面中有一个标签、一个文本框和一个按钮,编写程序实现:点击按钮后,将文本的内容取出,作为标签文本复制给标签。

要求:

(1)根据题目要求,选择合适的布局方案,添加相应的组件,完成程序窗口界面的设计。

(2)根据程序的功能,为相应组件添加需要的事件监听者,并对事件做相应的相应处理。

2.用GridLayout的布局方式设计一个界面,如图所示,共八个按钮。当点击有加号的按钮时,则第一排第二个按钮文本变为加号;当点击OK时,将计算的结果添加到第一排最后一个按钮文本中。当点击有*号的按钮时,则第一排第二个按钮文本变为*号;点击OK,将1*4的结果添加到第一排最后一个按钮文本中。

二、实验环境

Eclipse

三、理论分析或算法分析

实验步骤

  1. 复习有关类的相关内容;
  2. 根据界面要求,分析需要用到的布局管理器及组件;
  3. 根据功能要求,分析需要对哪些组件的哪些事件做怎样的响应处理;
  4. 根据上述分析结果编写代码;
  5. 调试代码,完善程序。

逻辑分析

问题1:

1.根据题意可以知道,在这个布局管理中需要一个标签,一个文本框,一个复制按钮,当你按按钮的时候,将文本框中的文字复制到标签中;

2.使用Frame的时候,需要关闭窗口这个功能,要特意写一个关闭的监听器,以达到你按关闭按钮的时候可以关闭这个窗口;

3.设置三个类型,Lable标签,TextFiled文本框,Button按钮,对每个器件功能进行编译,首先文本框,设置它的行数和列数,设置当你按复制按钮的时候可以把文本框中的东西复制到标签中,在代码中使用了一个pack()  作用:调整窗口的大小,使其适应组件的大小和布局。如果该窗口或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。在计算首选大小之后,将会验证该Window。窗口自动适应大小,使窗口能正好显示里面所有的控件。

4.使用Panel容器来实现对其他组件的容纳,加入lable和自己输入的内容,合理设

置布局;

问题2:

  1. 分析问题,可以知道,这是一个需要计算1+4和1*4的计算面板,所以需要一个控制面板,题中要求使用GridLayout的布局方式,在这个布局管理器中不能直接添加组件,需要使用getContenPane()来获取面板,然后在面板中进行添加组件;
  2. 设置GridLayout布局,根据题意是2行5列,布局为流式布局,根据题意可以看出来1 、4 、=这三个按钮是始终不动的,所以直接把内容添加进去即可,但是* 、+ 、OK这三个按钮就是根据用户的选择,所以这三个按钮就需要变化,这里使用setRolloverEnabled ()来实现图标的变化功能;
  3. 因为这个按钮的内容是变化的,所以需要为按钮注册监听者对象,以达到你按这个按钮这个按钮可以给你反应,使用addActionListener(this)实现;
  4. 有+ 、*、OK这三个按钮引起变化,需要判断是哪个按钮造成了结果,设置一个函数来实现此功能。

四、实现方法

问题1

package chaptor;

import java.awt.*;
import java.awt.event.*;

@SuppressWarnings("serial")
public class apperant extends Frame implements ActionListener
{
	private Label label = new Label();
	private TextField output = new TextField();
	private Button copy = new Button("Copy");

	private class WindowCloser extends WindowAdapter
	{
		public void windowClosing(WindowEvent we)
		{  
			System.exit(0); 
		}
	}
	public apperant ()
	{
		super("Copy a String To Label");
		setup();
		copy.addActionListener(this);
		addWindowListener(new WindowCloser());
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == copy)
		{
			label.setText(output.getText());
		}
	}
	private void setup()
	{
		Panel textGrid = new Panel();
		textGrid.setLayout(new GridLayout(2,1));
		textGrid.add(label);
		textGrid.add(output);
		setLayout(new BorderLayout());
		add("Center",textGrid);
		add("South",copy);
		pack();
		setVisible(true);
	}
	@SuppressWarnings("unused")
	public static void main(String[] args) {
		apperant cop = new apperant();
	}
}

问题2

package chaptor2;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.Action;
import javax.swing.JApplet;
import javax.swing.JButton;

public class Add extends JApplet implements ActionListener{
	Container cp = getContentPane();
	//创建按钮对象
	JButton bt1 = new JButton("");
	//创建按钮对象
	JButton bt2 = new JButton("");
	//创建按钮对象
	JButton bt3 = new JButton("+");
	//创建按钮对象
	JButton bt4 = new JButton("*");
	//创建按钮对象
	JButton bt5 = new JButton("OK");
	public void init() {
		//设置GridLayout布局
		GridLayout myLayout = new GridLayout(2, 5, 40, 60);
		//GridLayout(int rows, int cols, int hgap, int vgap)
		cp.setLayout(myLayout);
		cp.add(new JButton("1"));
		//将按钮图标变化功能打开
		bt1.setRolloverEnabled(true);
		cp.add(bt1);
		cp.add(new JButton("4"));
		cp.add(new JButton("="));
		//将按钮图标变化功能打开
		bt2.setRolloverEnabled(true);
		cp.add(bt2);
		cp.add(bt3);
		//注册bt的监听者对象this
		bt3.addActionListener(this);
		cp.add(bt4);
		//注册bt的监听者对象this
		bt4.addActionListener(this);
		cp.add(bt5);
		//注册bt的监听者对象this
		bt5.addActionListener(this);
		cp.add(new JButton());
	}
	public void actionPerformed(ActionEvent e) {
		//判断动作事件是否由bt3引发的
		if(e.getSource()==bt3) {
			bt1.setText("+");
		}
		//判断动作事件是否由bt4引发的
		if(e.getSource()==bt4) {
			bt1.setText("*");
		}
		//判断动作事件是否由bt5引发的
		if(e.getSource()==bt5) {
			if(bt1.getText()=="+")
				bt2.setText("5");
			if(bt1.getText()=="*")
				bt2.setText("4");
		}
	}
}

五、实验结果分析

问题1结果

问题2结果

测试中遇到的问题

1.这两个问题是参照网上的代码来实现的,好多内容不是很熟悉,比如容器和组件这里的函数好多自己都不是很熟悉,每个函数的含义不知道啥意思,每次看一个函数需要在网上搜索一下它的含义,感觉书上的知识和自己所要用的东西有些不一样,估计是自己还没有很熟悉每个器件的含义;

2.感觉自己的逻辑不是很好,在使用内部类的时候套用一些函数的时候,自己就不是很能看懂,所以要把这种逻辑多捋一捋,这样才可以更好的编程;

3.使用监听事件的时候不知道哪里该用,哪里需要,对这个部分不是很能理解,自己多看看这个类型的东西可以解决;

4.基础知识不是很稳固,要多加看书,把自己的基本知识搞扎实,多看书;

  • 22
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值