黑马程序员-------图形化用户交互---GUI

时间:2023-01-27 13:41:37

                                   黑马程序员-------图形化用户交互---GUI         

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

                               

两种用于用户操作的界面:
    图形化界面  GUI: 
    命令行   CLI:


 GUI:
 Graphical User Interface (图形用户接口)
 用图形方式,来显示计算机操作界面,这样更方便直观,
 CLI:
 Command line User Interface(命令行用户接口)
 就是常见的Dos命令操作,
 需要记忆一些常用的命令,操作不直观.
举例:
 比如:创建文件夹,或者删除文件夹等
java为GUI提供对象在Java.Awt和javax.Swing两个包中


Awt与Swing
 java.Awt: Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属重量级控件.
 javaxSwing:在AWT的基础上,建立的一套图新界面系统,其中提供了更多的组件,而且完全由java实现,增强了移植
 属轻量级控件

Awt组件:

                                         Component

                                        /              |----Button  按钮

                          容器 Container      |---lanle   标签

                            |                 |        |----checkBoz  复选框

           窗口Window     panel 面板   |-----TextComponent  文本组件 

                     |                  |                        /                 \

         框架Frame   Dialog对话框  TextArea文本区域    TextField 文本框

                                        |

                              FileDialog文本对话框








特殊组件 : Container 作为一个组件里面可以添加组件


布局管理器
 容器中的组件的排放方式,也就是布局
 常见的布局管理器;
   FlowLayout(流式布局管理器)
     从左到右的顺序排列
Panel默认的布局管理器
   BorderLayout(边界布局管理器)
     东南西北中
Frame默认布局管理器
   GridLayout(网格布局管理器)
     规则的矩阵
   CardLayout(卡片布局管理器)
     选项卡
   GridBagLayout(网格包布局管理器)
     非规则的矩阵  
                  

创建交互界面思路:
1.创建一个frame窗体
2.对窗体进行基本设置
   比如大小,位置,布局.
3.定义组件
4.将组件通过窗体的add方法添加到窗体中.
5.让窗体显示,通过setVisible(true)

import java.awt.*;
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
f.setSize(500,400);//设置初始化大小500是横坐标(款),100是纵坐标(长)
f.setLocation(400,400); //初始化设置默认显示位置(横坐标,纵坐标)
f.setVisible(true); //设置显示隐藏

//添加按钮
Button b = new Button("点击添加");
f.add(b);

f.setLayout(new FlowLayout());//设置布局管理格式

//System.out.println("Hello Word");
}
}

事件监听机制组成
  事件源(组件)
  事件(Event)
  监听器(Listener)
  事件处理(引发事件后处理方式)


 事件监听机制个点:
  
  事件源:Awt包或者Swing包中的那些图形界面组件:


  事件: 每一个事件源都有自己特有的对应事件和共性事件


  监听器: 将可以触发某一个事件的动作(不止一个动作)都封装到了监听器中


  以上三者,在java中定义好了,
  直接获取对象来用就可以了.


  我们要做的事情就是,对产生动作进行处理.


添加监听器:
 void  addWindowListener(WindowListener l );
          添加窗体监听器,以从此窗口接受窗口事件


       窗口监听实例---关闭窗口:

             

import java.awt.*;
import java.awt.event.*;
class AwtDemo1
{
public static void main(String[] args)
{
Frame f = new Frame("Awt Demo");
f.setSize(500,400); //设置窗口大小
f.setLocation(500,600); //设置窗口出现位置
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);
}


});//添加监听器





f.setVisible(true); //显示组件
}
}
/*
class MyWin implements WindowListener
{
//覆盖7个方法.可是只需要使用到关闭动作方法
//其他动作都没用到,可是却必须复写
}
*/

//因为WindowListener的子类WindowAdapter已经时间了WindowListener接口
//并覆盖了其中的所有方法,那么我们只需要继承自windowAdapter覆盖需要的方法即可
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
// System.out.println("关闭窗口---"+e);
System.exit(0);
}


}


 void addKeyListener(KeyListener l);

         添加键盘监听器,从此键盘接受键盘事件

 void addMouseListener(MouseListener l);

         添加鼠标监听器,以从此鼠标接受鼠标事件

 void addActionListener(ActionListener l);

         添加活动监听器,以从此活动来接受活动事件
        

   键盘监听事件实例:

               

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{
MouseAndKeyEvent()
{
init();
}
private Frame f;
private Button but;
private TextField tf;
public void init()
{
f=new Frame("Mouse");
//初始化窗口大小,出现位置
f.setBounds(400,500,600,500);
f.setLayout(new FlowLayout());//设置布局管理方式


tf = new TextField(20);
f.add(tf);

but = new Button("点击激活");
f.add(but);



myAction();

f.setVisible(true);
}

private void myAction()
{ //窗口监听器 监听器:Listenrt
//顺序: 添加适配器-->多个方法是用适配器,一个方法是用监听器-->覆盖方法-->添加事件
f.addWindowListener(new WindowAdapter()//(方法太多使用适配器)
{
//even 事件
public void windowClosing(WindowEvent e)
{
System.exit(0);

}

});
//鼠标监听器
but.addMouseListener(new MouseAdapter()//(鼠标适配器)
{
private int count=0;
public void mouseEntered(MouseEvent e)//event 事件
{
System.out.println("鼠标事件"+count++);

}

//鼠标点击事件
private int ClickedCount = 0;
public void mouseClicked(MouseEvent e)//鼠标事件
{
if(e.getClickCount()==2)
System.out.println("鼠标点击事件"+ClickedCount++);


}
});
//给键盘添加监听器
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown()&&e.getKeyCode()==e.VK_S)//isContorlDown()//是否按下Control
//System.out.println("Control + s");
System.exit(0);


// System.out.println(Event.getKeyText(e.getKeyCode())+":::"+e.getKeyCode());

}
});
//监听键盘
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code=e.getKeyCode();
//定义限制文本框输入的字符
if (!(code>=e.VK_0 && code<=e.VK_9 || code==e.VK_BACK_SPACE))
{
System.out.println(code+"非法的");
e.consume();//屏蔽键
}


}


});


}

public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}

   练习 :

   在文本框中输入目录,点击"转到"按钮,.将该目录的文件以及文件名称列在下面的文本区域中

    思路:
1.制作图形化界面
  需要用到:
       按钮: Button
  窗口: Frame
  文本框: TextField
  文本区域: TextArea
 2.点击转到: 需要进行按钮组件活动监听
 3.监听到之后需要返回文本框TextField中输入的目录字符
                    使用到组件中的getText()方法
 4.将获取到的目录名添加到File 对象中,
     转换成字符串数组进行遍历

            

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class TextDemo1
{ //所以要的组件
private Frame f;
private Button but;
private TextField tf;
private TextArea ta;
//构造函数
TextDemo1()
{
init();
}
//制作图形化界面
public void init()
{
//创建新的窗口对象
f = new Frame("File");
//初始化界面
f.setBounds(500,500,600,500);
//添加布局管理
f.setLayout(new FlowLayout());
//创建组件对象并添加组件
tf = new TextField(70);
but =new Button("转到");
ta = new TextArea(25,80);
f.add(tf);
f.add(but);
f.add(ta);

myEvent();
//显示窗口
f.setVisible(true);
}
private void myEvent()
{ //添加活动监听器
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//返回tf的字符串
String dirPath= tf.getText();

//创建File对象 指定定构造其中的文件
File dir = new File(dirPath);

//判断dir制定文件是不是存在&&是否是一个目录
if(dir.exists() && dir.isDirectory())
{ ta.setText("");
String[] names = dir.list();
for(String name : names)
{
ta.append(name+"\r\n");
}
}

/* //给ta设置显示字符串
ta.setText(text);
//清空tf*/




//tf.setText("");

//System.out.println(text);
}

});

//添加窗口监听器
f.addWindowListener(new WindowAdapter()
{ //关闭创窗口事件
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//添加键盘监听器
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{ //当在tf中按下enter时运行方法
int code = e.getKeyCode();
if (code==e.VK_ENTER)
{
String dirPath1 = tf.getText();

File dir1 = new File(dirPath1);

if(dir1.exists() && dir1.isDirectory())
{ ta.setText("");
String[] fl = dir1.list();

for (String name1 :fl )
{
ta.append(name1+"\r\n");

}
}
}
}

});
}
public static void main(String[] args)
{
new TextDemo1();
}
}
                ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

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