-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

GUI(图形用户界面)



GUI

•  Graphical User Interface(图形用户接口)。

•  用图形的方式,来显示计算机操作的界面,这样更方便更直

观。



CLI

•  Command line User Interface (命令行用户接口)

•  就是常见的Dos命令行操作。

•  需要记忆一些常用的命令,操作不直观。

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中

Awt和Swing



•  java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

•  javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。

布局管理器



容器中的组件的排放方式,就是布局。



常见的布局管理器:

• FlowLayout(流式布局管理器)• 从左到右的顺序排列。• Panel默认的布局管理器

• BorderLayout(边界布局管理器)• 东,南,西,北,中• Frame默认的布局管理器。

• GridLayout(网格布局管理器)• 规则的矩阵

• CardLayout(卡片布局管理器)• 选项卡

• GridBagLayout(网格包布局管理器)• 非规则的矩阵

事件监听机制组成



事件源(组件)就是awt包或者swing包中的那些图形界面组件。



事件(Event)每一个事件源都有自己特有的对应事件和共性事件。



监听器(Listener)将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。



事件处理(引发事件后处理方式)

事件监听机制



确定事件源(容器或组件)



通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。



该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。



一般用匿名内部类来表示。



在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。



事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

import java.awt.*;
import java.awt.event.*; /*
创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true)
*/
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout()); Button b = new Button("我是一个按钮"); f.add(b); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。"); } public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了,hahahhahah");
} });
f.setVisible(true);
}
}
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; class FrameDemo
{ //定义该图形中所需的组件的引用。
private Frame f;
private Button but; FrameDemo()
{
init();
} public void init()
{
f = new Frame("my frame"); //对frame进行基本设置。
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中
f.add(but); //加载一下窗体上事件。
myEvent(); //显示窗体;
f.setVisible(true); }
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); //让按钮具备退出程序的功能
//通过查阅button的描述。发现按钮支持一个特有监听addActionListener
but.addActionListener(new ActionListener()
{
private int count = 1;
public void actionPerformed(ActionEvent e)
{
Button b = (Button)e.getSource(); Frame f1 = (Frame)b.getParent(); f1.add(new Button("button-"+count++));
f1.validate();
}
});
} public static void main(String[] args)
{
new FrameDemo();
}
}
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; class FrameDemo
{ //定义该图形中所需的组件的引用。
private Frame f;
private Button but; FrameDemo()
{
init();
} public void init()
{
f = new Frame("my frame"); //对frame进行基本设置。
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到frame中
f.add(but); //加载一下窗体上事件。
myEvent(); //显示窗体;
f.setVisible(true);
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); //让按钮具备退出程序的功能
//通过查阅button的描述。发现按钮支持一个特有监听addActionListener
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("ESC,button do");
System.exit(0);
}
});
} public static void main(String[] args)
{
new FrameDemo();
}
}
public class MouseAndKeyDemo {
public static void main(String[] args) {
new MouseAndKeyDemo(); }
//定义该图形中所需的组件的引用
private Frame f;
private Button but;
private TextField tf;
MouseAndKeyDemo()
{
init();
} public void init()
{
f = new Frame("my frame");
but = new Button("my button"); f.add(but);
//创建一个指定长度的文本框;
tf = new TextField(30);
f.add(tf);
f.setBounds(300, 200, 650, 550);
f.setLayout(new FlowLayout()); setEvent(); f.setVisible(true);
}
public void setEvent()
{
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//给按钮添加鼠标监听
but.addMouseListener(new MouseAdapter(){
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("鼠标双击"+clickCount++);
}
});
//给按钮添加键盘监听
but.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e)
{
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ESCAPE)
System.exit(0);
}
});
//给文本框添加监听器,实现只能输入数字
tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e)
{
if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9))
{
System.out.println("出现非法字符");
e.consume();
}
}
});
public class Test {
public static void main(String[] args) {
new Test();
}
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
private Dialog d;
private Label lab;
private Button okbut;
Test(){
init();
}
private void init() {
f = new Frame("my window");
tf = new TextField(30);
but = new Button("转到");
ta = new TextArea(30,50);
//创建一个对话框
d = new Dialog(f,"提示信息",true);
//设置对话框的的布局管理器
d.setLayout(new FlowLayout());
//设置对话框的位置和大小
d.setBounds(400, 200, 240, 120);
//设置对话框的显示内容
lab = new Label();
okbut = new Button("确定");
//把内容和按钮添加到对话框中
d.add(lab);
d.add(okbut); f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());
f.add(tf);
f.add(but);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent() {
//窗体关闭监听器
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//显示文件的监听器
but.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String filePath = tf.getText();
File dir = new File(filePath);
if(dir.exists() && dir.isDirectory())
{
tf.setText("");
ta.setText("");
String[] dirs = dir.list();
for(String name : dirs)
{
ta.append(name+"\r\n");
}
}else{
String s = "您出入的地址:"+filePath+"是错误的";
lab.setText(s);
d.setVisible(true);
}
} });
//对话框关闭监听器
d.addWindowListener(new WindowAdapter(){
public void windowClosing()
{
d.setVisible(false);
}
});
//对话框中确定按钮的监听器
okbut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});
}
}

菜单:

public class MyMenuDemo {
public static void main(String[] args) {
new MyMenuDemo();
}
private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem mi,subItem;
MyMenuDemo(){
init();
}
private void init() {
f = new Frame("my frame");
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());
//创建一个菜单栏
mb = new MenuBar();
//创建一个菜单
m = new Menu("文件");
subMenu = new Menu("子菜单");
//创建菜单项
mi = new MenuItem("退出");
subItem = new MenuItem("子条目");
//将菜单项关联到菜单中
subMenu.add(subItem); m.add(subMenu);
m.add(mi);
//将菜单添加到菜单条中
mb.add(m);
//将菜单栏添加到窗体中
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
private void myEvent() {
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
mi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}); }
}

-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员——JAVA基础之GUI的更多相关文章

  1. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  2. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  3. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  4. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  5. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  6. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  7. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  8. 黑马程序员——JAVA基础之多线程的安全问题

    ------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...

  9. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

随机推荐

  1. contiki-进程

    进程的结构 Contiki的进程由两部分组成:进程控制块和进程线程.进程控制块存储在内存中,它包含进程运行时的信息,比如:进程名.进程状态.指向进程线程的指针. 进程线程是存储在ROM中的一个代码块. ...

  2. JVM 内存

    大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack( ...

  3. page,client,offset区别

    offset:相对于当前“盒子”的距离 ,与滚动条无关 client:相对于可视区域的距离,与滚动条无关 page:相对于整个页面的距离,与滚动条有关 示例代码: <!DOCTYPE html& ...

  4. SPSS常用基础操作(2)——连续变量离散化

    首先说一下什么是离散化以及连续变量离散化的必要性. 离散化是把无限空间中无限的个体映射到有限的空间中去,通俗点讲就是把连续型数据切分为若干“段”,也称bin,离散化在数据分析中特别是数据挖掘中被普遍采 ...

  5. Svn与Git的一些区别(转载)

    把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本 ...

  6. Windows Store App 全球化:在XAML元素中引用文件资源

    上一小节讲解了如何在XAML元素中使用x:Uid属性引用资源文件中的字符串资源,通过改变语言首选项显示不同的运行结果.如果把字符串资源变成文件资源,就不能使用x:Uid属性来引用这些文件资源.本小节将 ...

  7. Top Five Hacker Tools Every CISO Should Understand

    As the role of the CISO continues to evolve within organizations towards that of an executive level ...

  8. Python学习笔记-字典

    字典是python中唯一内建的映射类型. 创建字典phonebook = {'Alice':'2341','Beth':'9102'} 可以使用dict通过其他映射或者键值对的序列建立字典.关键值参数 ...

  9. Hinet 日本数据处理流程

    ---恢复内容开始--- 推荐网站: http://ju.outofmemory.cn/entry/138571 ridnet.py 将Hinet 的cnt 数据提取为sac数据,参考网站 http: ...

  10. Tri-Training: Exploiting Unlabeled Data Using Three Classifiers

    Abstract – In many practical data mining applications such as web page classification, unlabeled tra ...