Java学习笔记(8) -Java GUI设计与事件处理

第八章 Java GUI设计与事件处理

1、题目

1.1、 如何来制作图形界面?它需要引入哪些包

创建窗口并在窗口中添加各种组件,指定组件的属性和它们在窗口中的位置,从而构成图形界面的外观效果。定义图形界面的事件和各种组件对不同事件的响应,从而实现图形界面与用户的交互。
简而言之,制作图形界面需要引入java中的开发包,然后利用其中封装的函数与类,编写自己的类继承它们然后构造界面和界面中一系列的东西。
利用界面操作引入需要引入AWT包、Swing包等,根据需要选择其中相应的内容。

1.2、 在java中,什么是事件?简述处理事件的机制。

事件是可以被控件识别的操作。与事件源绑定的事件对象对事件源设置监听,一旦事件源有动作发生,即运行与其绑定的处理事件。
事件指一个描述事件源状态改变的对象 。java语言对事件的处理采用的是授权事件模型。在这个模型下,每个组件都有相应的事件,如按钮有单击事件,文本域具有内容改变事件等。当某个事件被触发后,组件就会将事件发送给组件注册的每一个事件监听器,事件监听器中定义了与不同事件相对应的事件的处理,此时事件监听器会根据不同的事件信息调用不同的事件处理者,完成对这次事件的处理,只有事件监听器被触发后才会收到事件信息。

1.3、 什么是布局管理器,它有什么作用?

布局管理器是控制组件在容器中位置的类的实例。其作用是将控件依据编程人员的需要排列布局。
布局管理器是一个实现Layout Manager接口的类的实例。布局管理器的作用包括设置计算容器的最佳和最小尺寸以及将容器中的组件大小和位置作合适的安排。

1.4、 请编写一个窗口来实现BorderLayout的布局。

package xiti8;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;

class borderLayoutFrame extends Frame{
borderLayoutFrame(){
    super("BorderLayout布局窗口测试");
    Panel myPanel = new Panel();
    myPanel.setLayout(new BorderLayout());
    Button north = new Button("北面");
    Button south = new Button("南面");
    Button east = new Button("东面");
    Button west = new Button("西面");
    Button center = new Button("中央");
    myPanel.add(north,BorderLayout.NORTH);
    myPanel.add(south,BorderLayout.SOUTH);
    myPanel.add(east,BorderLayout.EAST);
    myPanel.add(west,BorderLayout.WEST);
    myPanel.add(center,BorderLayout.CENTER);
    this.add(myPanel);
    this.setSize(320,240);
    this.setVisible(true);
}
}

public class xiti8_4 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    borderLayoutFrame borfrm = new borderLayoutFrame();
    borfrm.show();
}
}

这里写图片描述

1.5、 请说明FlowLayout布局方式的特点?

FlowLayout布局方式是JPanel的默认布局,组件按照加入的先后顺序从左至右排列,排满后进入下一行,默认居中排列,组件之间的默认水平和垂直间隙是5个像素,组件大小默认为最佳大小,即可以保证显示其上面的文字。。
FlowLayout的布局策略是将容器中的组件按照加入的先后顺序从左向右排列。如果一行排满转下一行继续,每行均采取居中排列。

1.6、GridLayout布局的特点有哪些?

GridLayout布局是将容器划分为若干行乘若干列的网格区域,然后组件就位于这些划分出来的小格子中,每个组件大小即格子大小,均一致。

1.7、 编写“画圆画方”的程序

惭愧,这题自己写给写乱套了,然后就参考大神的写的,附上传送门:画圆画方
http://blog.csdn.net/Jayler_May/article/details/72825582

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

public class myhuatuFrame extends JFrame{
myhuatuFrame(String str){
    super(str);
    this.setVisible(true);
//  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口
    this.setSize(400, 400);
    myPanel myhuatuPanel = new myPanel();//创建面板 
//  myhuatuPanel.setBackground(Color.yellow);
    this.add(myhuatuPanel,BorderLayout.CENTER);
    myhuatuPanel.addMouseListener(myhuatuPanel);//添加鼠标监视器 
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}

class myPanel extends JPanel implements MouseListener{
//  static int X,Y;
int clickedNum = 0;
@Override
public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    int X = e.getX();
    int Y = e.getY();
    clickedNum = e.getButton();//获取鼠标点击的次数
    Graphics g = this.getGraphics();//重绘
    if(clickedNum == 1) {//如果是点击左键
        if(e.getClickCount() == 2) {//如果是双击左键
            g.setColor(Color.white);
            //g.drawOval(X, Y, 30, 30);
            g.fillRect(0,0,1000,1000);
        }
        else if(e.getClickCount() == 1) {
            g.setColor(Color.green);
            //g.drawOval(X, Y, 30, 30);
            g.fillOval(X,Y,10,10);
        }
    }
    else if(clickedNum == 3) {//如果是点击右键 
        g.setColor(Color.red);
        //g.drawRect(X,Y,30,30);
        g.fillRect(X,Y,10,10);
    }
}
//对mouse的各种事件的重写,自动加上的,不然报错,跟super一个道理???
@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

}

//}

//public class xiti8_7_2 {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    myhuatuFrame frm = new myhuatuFrame("画圆画方");
    frm.show();
}
}
//}

这里写图片描述

 对照阅读:
 《深入浅出MFC》,侯俊杰著,第九章。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李霁明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值