黑马程序员—学习java基础10日志

本文介绍了 Java 中 GUI(图形用户界面)编程的基础知识,包括 GUI 和 CLI 的区别、常用的布局管理器及其使用方法,并通过具体示例展示了如何创建简单的 Java AWT 应用程序,如按钮事件监听、对话框及菜单的实现。
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、GUI(图形用户界面)
1、GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。
2、计算机与用户交互的两种方式:GUI和CLI
        GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。
        CLI: Command LineUser Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观
3、java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。
        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
        javax.Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻量级控件


二、布局管理器
1、布局:容器中的组件排列方式
2、常见的布局管理器:
        1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
        2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗 体。
        3)GridLayout:网格式布局管理器,规则的矩阵
        4)CardLayout:卡片式布局管理器,即选项卡
        5)GridBayLayout:网格包布局管理器,非规则矩阵


五, 创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
  比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。

5,让窗体显示,通过setVisible(true)


事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。




事件源:就是awt包或者swing包中的那么图形界面组件。
事件:每一个事件源都有自己特有的对象事件和共性事件、
监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。




以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了


           代码体现:

                       import java.awt.*;
import java.awt.event.*;
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 MyWin());//关闭窗口


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("我被打开了");//打开窗口
}
});
f.setVisible(true);//让窗体显示

                                

    7,让按钮具备退出程序的功能:
按钮就是事件源。
那么选择那么监听器呢?
通过关闭窗体示例了解到,想要知道那个组件具备什么样的特有监听器。
需要查看该组件对象的功能。
通过查阅button的描述。发现按钮支持一个特有监听addActionListener

                       

                         

                       


       监听:
          1,//给But添加一个键盘监听。
   /*
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);//Ctri键加上Enter键结束窗口
   //System.out.println("ctrl+enter is run");//只有Ctri键加上Enter键才会打印
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
                   //输入任何一个键会显示对应的数字 如:Enter....10
}
});*/
            2,//鼠标监听:
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++);
}
});
 六,对话框  
     何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创建的          这个对象。 
     示例:

                 //练习:代码实现图中的窗口格式列出目录下的文件,如果输入的信息有误提示对话框
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class DiaoYong
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
    //如果输入有误弹出对话框:
private Dialog d;
private Button okbut;
private Label lab;
DiaoYong()
{
         init();
}
public void init()
{
f=new Frame("my fame");
f.setBounds(300,100,500,400);//300与左边的距离。100与上边的距离。
                           //500是窗体的长度。400是窗体的宽度
f.setLayout(new FlowLayout());
tf=new TextField(60);
but=new Button("转到");
ta=new TextArea(20,50);//20是表示横标。50是表示纵标
f.add(tf);
f.add(but);
f.add(ta);


d=new Dialog(f,"提示信息-self",true);//创建对话框
d.setBounds(400,200,250,150);
d.setLayout(new FlowLayout());
lab=new Label();
okbut=new Button("确定");
d.add(lab);
d.add(okbut);


myEvent();
f.setVisible(true);
}
public void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
showDir();
}
});
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
});
d.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);//让窗口不显示
}
});
okbut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);//让窗口不显示
}
});
}
public void showDir()
{
String dirPath=tf.getText();
File dir=new File(dirPath);
if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String [] st=dir.list();//列出路径名表示的目录中的文件和目录
for(String name:st)
{
   ta.append(name+"\t\n");
}
}
//ta.setText(txt);
        //tf.setText("");
//System.out.println(txt);
else
{
String s="您输入有误:"+dirPath+"请重新输入";
lab.setText(s);//错误信息加入到对话框中
d.setVisible(true);
}
}
}
class LXDemo
{
public static void main(String[] args) 
{
new DiaoYong();
}
}

                        

                          

                            

        
        
        




七,菜单:Menu
       
        示例:
                  //菜单:
import java.awt.*;
import java.awt.event.*;
class Mymenu
{
private Frame f;//创建窗体
private MenuBar mb;//将菜单栏与 Frame 对象关联
private Menu m,subMenu;//创建菜单栏
private MenuItem closeItem,subItem;//创建菜单项
Mymenu()
{
init();
}
public void init()
{
f=new Frame("my fame");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout());
mb=new MenuBar();
m=new Menu("文件");
subMenu=new Menu("子菜单");//在"文件"栏目下再添加菜单栏:"子菜单"


closeItem=new MenuItem("退出");
subItem=new MenuItem("子条目");//在"文件"栏目下再添加菜单项:"子条目"


subMenu.add(subItem);//在"子菜单"下再添加"子条目"
m.add(subMenu);
m.add(closeItem);


mb.add(m);
f.setMenuBar(mb);


myEvent();
f.setVisible(true);
}
public void myEvent()
{
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
class  MymenuDemo
{
public static void main(String[] args) 
{
new Mymenu();
}
}
          
          
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值