JAVA--图形界面化

来源:互联网 发布:八皇后问题递归算法 编辑:程序博客网 时间:2024/05/19 08:37

图形界面继承体系

Component
所有图形界面超类 抽象类,具有图形表示能力的类

Container
容器: 就是可以将对象存储进去
存储的是图形界面上的内容,菜单,按钮,文本框

Container子类
Window – 窗体 无边框的窗体
Frame – 具有标题和边框的窗体
Panel – 面板 窗体分割可以存储按钮容器
Dialog – 对话框,小的窗体,进行信息的提示
FileDialog – 文件对话框

Button 按钮
Label 文本标签 信息提示使用
checkbox 复选框
TextArea 多行文本区域

TextField 单行文本区域

java.awt.Frame 带有标题和边框的窗口
构造方法
Frame(String title)传递字符串的标题
显示窗体容器,调用Frame类的父类方法
setVisible(boolean b)传递true,就显示

对窗体进行设置
大小尺寸 父类方法 setSize(int width,int height) 数据单位像素
像素: 组成图像中最小的不可分割的实心小点

屏幕定位 父类方法 setLocation(int x,int y) X轴坐标,Y纵轴坐标
获取屏幕分辨率
Toolkit static Toolkit getDefaultToolkit() 返回的是类的子类对象
Toolkit.getDefaultToolKit().getScreenSize().width 返回是Dimension

设置窗体背景色
父类方法 setBackground

/* * 使用Frame类,实现图形界面 * 图形界面,是另一个线程在控制 */public class FrameDemo {    public static void main(String[] args) {        //创建Frame对象,写字符串标题        Frame f = new Frame("第一个窗体");        //父类方法setVisible        f.setVisible(true);        //获取屏幕分辨率        int h = Toolkit.getDefaultToolkit().getScreenSize().height;        int w = Toolkit.getDefaultToolkit().getScreenSize().width;        //尺寸设置,父类方法 setSize        f.setSize(500, 400);        //屏幕位置,父类方法 setLocation        f.setLocation((w-500)/2, (h-400)/2);        //设置背景色,父类方法setBackground        f.setBackground(new Color(202,232,207));    }}

======================================================

按钮组件的使用
Button类
构造方法 Button(String label) 传递字符串的标签,标签就是按钮上写的字
设置位置,和尺寸的方式,和Frame窗体是一样
将按钮添加到窗体,使用的是窗体的方法add

/* * 按钮,添加到窗体上  */public class FrameDemo1 {   public static void main(String[] args) {        Frame f = new Frame("窗体添加按钮");        f.setVisible(true);        int h = Toolkit.getDefaultToolkit().getScreenSize().height;        int w = Toolkit.getDefaultToolkit().getScreenSize().width;        f.setSize(500, 400);        f.setLocation((w-500)/2, (h-400)/2);        f.setBackground(new Color(202,232,207));        //设置布局管理,null 取消所有布局管理        //组件位置,可以任意放置,必须要定位和尺寸        f.setLayout(null);        //创建按钮对象        Button but = new Button("确定");        Button but1 = new Button("取消");        //按钮添加到窗体中,窗体方法add        f.add(but,BorderLayout.WEST);        f.add(but1,BorderLayout.EAST);        but.setSize(100, 30);        but1.setSize(100, 30);        but.setLocation(150, 50);        but1.setLocation(280, 50);}}

=======================================================
事件监听机制
作用: 让图形界面,有一定功能产生,根据用户的实际操作,产生不同的功能

事件源:
就是用户可以直接操作的部分, 按钮,文本框,窗体,菜单

事件:
用户的操作方式, 鼠标,键盘,窗体事件
鼠标: 点击 鼠标悬停,离开
键盘: 按下 弹起
窗体: 打开 退出 最大最小

监听器: 类似于窃听器
一旦开始工作,就不停,工作在事件源上,事实监听用户的操作
只要用户操作了事件源,用户的动作就会被事件监听器抓住
根据不同的动作处理这个事件

处理方式:
就是程序中的方法,监听器会根据用户的动作不同,选择调用方法
a(){} b(){} c(){}

点击窗体上的叉子,窗体关闭
事件源: 窗体
事件: 关闭
监听器: 作用在窗体上监听器,监听用户对窗体的操作
点击的内容,调用处理方法
a(){} b(){}

/* * 事件监听机制,实现点击窗体上叉子,关闭窗体 */public class FrameDemo2 {    public static void main(String[] args) {        Frame f = new Frame("窗体关闭事件");        f.setBounds(200, 100, 500, 400);        f.setVisible(true);        //事件源,窗体,添加事件监听器        // addWindowListener        //传递接收事件的接口的实现类对象,重写接口方法        //方法,监听器根据用户的操作,自行调用        //简化成了匿名的内部类实现,new 适配器类        /*f.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e){                System.exit(0);            }        });*/        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e){                System.exit(0);            }        });    }}//简化书写,自定义定义实现类,做接口的空实现//没有抽象方法的抽象类,接口的适配器类  //220V  电源适配器   -> 3.7  把你插座不想要的220V,变成你想要的3.7V//抽象类,将接口中,不想要的方法,适配你想要的方法//WindowAdapter 类的源代码  My 是一样的/*abstract class My implements WindowListener{    public void windowActivated(WindowEvent e) {}    public void windowClosed(WindowEvent e) {}    public void windowClosing(WindowEvent e) {}    public void windowDeactivated(WindowEvent e){}     public void windowDeiconified(WindowEvent e) {}    public void windowIconified(WindowEvent e) {}    public void windowOpened(WindowEvent e) {}  }*//* * 自定义WindowListener实现类 *//*class MyListener extends WindowAdapter{    public void windowClosing(WindowEvent e) {        System.exit(0);    }}*/

最终版本的
写图形界面事件监听器的标准公式
导入 awt awt.event
事件源.addXXXListener(new XXXAdapter(){
public void EEE(XXXEvent e){
}
});

but.addMouseListener(new MouseAdater(){
public void MouseClicked(MouseEvent e){

 }

});

================================================
鼠标事件,调用事件处理方法中, MouseEvent类
int getClickCount() 鼠标的在事件源上的点击次数

/* * 鼠标事件 *   按钮添加鼠标事件,点击,鼠标的悬停,鼠标离开 */public class FrameDemo3 {    public static void main(String[] args) {        Frame f = new Frame("按钮的鼠标事件");        f.setVisible(true);        int h = Toolkit.getDefaultToolkit().getScreenSize().height;        int w = Toolkit.getDefaultToolkit().getScreenSize().width;        f.setSize(500, 400);        f.setLocation((w-500)/2, (h-400)/2);        f.setBackground(new Color(202,232,207));        f.setLayout(null);        //创建按钮对象        Button but = new Button("确定");        but.setSize(100, 30);        but.setLocation(150, 50);        f.add(but);        //对事件源按钮,添加事件监听器,鼠标事件        but.addMouseListener(new MouseAdapter() {            //重写鼠标的点击调用方法            //MouseEvent类对象,是事件监听器调用方法自动传递            //鼠标信息,点击位置(按钮,屏幕)按下的键位1左键,2是滚轮,3是右键,点击次数            public void mouseClicked(MouseEvent e){                //调用MouseEvent类方法getClickCount方法获取鼠标点击次数                if(e.getClickCount()==2){                    System.out.println("双击");                }            }            //鼠标移入时调用,悬停状态            public void mouseEntered(MouseEvent e) {                System.out.println("鼠标移入到按钮");            }            //鼠标离开时调用            public  void mouseExited(MouseEvent e) {                System.out.println("鼠标离开按钮");            }        });    }}

单行文本
java.awt.TextField 表示可以编辑的单行文本
构造方法
空参数,文本框没有任何内容
传递字符串参数,文本框就会显示出,字符串

位置尺寸设置和Frame一样 setBounds
窗体容器add
String getText() 获取文本框内容,不写内容,返回的是 “”
void setText() 设置文本框内容

多行文本
java.awt.TextArea 表示可以编辑的多行文本
构造方法
空参数,文本框没有任何内容
传递字符串参数,文本框就会显示出,字符串

/* * 数据转移 *   文本框,单行文本  TextField *   多行文本区域,可以换行  TextArea * 在单行文本框,键盘键入内容,点击按钮,文本内容,从单行文本转移到多行中 */public class FrameDemo4 {    public static void main(String[] args) {        Frame f = new Frame("文本数据转移");        f.setVisible(true);        int h = Toolkit.getDefaultToolkit().getScreenSize().height;        int w = Toolkit.getDefaultToolkit().getScreenSize().width;        f.setSize(500, 400);        f.setLocation((w-500)/2, (h-400)/2);        f.setBackground(new Color(202,232,207));        f.setLayout(null);        //创建单行文本框        final TextField tf = new TextField();        //设置        tf.setBounds(40, 50, 300, 25);        f.add(tf);        //创建按钮        Button but = new Button("数据转移");        but.setBounds(380, 50, 60, 25);        f.add(but);        //创建多行文本框        final TextArea ta = new TextArea();        ta.setBounds(40, 90, 300, 200);        f.add(ta);    //  ta.setFont(new Font("宋体",Font.BOLD,15));        //按钮,添加鼠标事件        but.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e){                //获取文本框内容                String text = tf.getText();                if("".equals(text))                    return ;                /*String os = System.getProperties().getProperty("os.name");                System.out.println(os);                String line = null;                if(os.startsWith("W"))                    line = "\r\n";                else                    line = "\n";*/                //将文本,设置到多行文本区域                ta.append(text+"\r\n");                //清空单行文本                tf.setText("");            }        });        //窗体事件,程序关闭        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e){System.exit(0);}        });    }}

=====================================================
获取用户的按键,需要ASCII码,键盘上的键很多
KeyEvent 描述按下键盘后信息
KeyEvent 静态成员变量 ,需要的ASCII码
静态变量,变量名就是键盘上的键的名字,保存的数值就是这个键的码值

KeyEvent类方法
int getKeyCode 返回按下键的ASCII
char getKeyChar 返回按下键的字符

KeyEvent类的父类方法 consume()终止当前事件
KeyEvent类的父类方法可以判断按下的特殊键盘
isAltDown boolean isControlDown()

/* *  键盘事件,文本框 *    捕获到按下的键 *    阻止非法键 *    组合键 Ctrl+Enter */public class FrameDemo5 {    public static void main(String[] args) {        Frame f = new Frame("键盘事件");        f.setVisible(true);        int h = Toolkit.getDefaultToolkit().getScreenSize().height;        int w = Toolkit.getDefaultToolkit().getScreenSize().width;        f.setSize(500, 400);        f.setLocation((w-500)/2, (h-400)/2);        f.setBackground(new Color(202,232,207));        f.setLayout(null);        //创建单行文本框        TextField tf = new TextField();        //设置        tf.setBounds(40, 50, 300, 25);        f.add(tf);        //事件源文本框,添加键盘事件        tf.addKeyListener(new KeyAdapter() {            public void keyPressed(KeyEvent e){                //获取到键盘上ASCII码                int code = e.getKeyCode();                //判断code范围是不是数字            /*  if(code < KeyEvent.VK_0 || code > KeyEvent.VK_9){                    e.consume();                }*/                //Ctrl+Enter的组合键                //父类方法  isControlDown() 判断回车键                if(e.isControlDown() && code == KeyEvent.VK_ENTER){                    System.out.println("组合键");                }            }        });    }}

======================================================

图形界面上的菜单
MenuBar 菜单栏
Menu 菜单
MenuItem 菜单项

创建菜单栏对象
MenuBar 构造方法,空参数
菜单添加到窗体上, 使用的是窗体方法setMenuBar

创建菜单对象
Menu 构造方法,传递字符串,显示菜单上
MenuBar方法add添加菜单

创建菜单项
MenuItem 构造方法,传递字符串,显示菜单项上
Menu类的方法add添加菜单

MenuItem 才能添加事件,活动事件

子菜单,一个Menu.add(另一个Menu)

public class MenuDemo {    public static void main(String[] args) {        Frame f = new Frame("制作菜单");        f.setBounds(200, 100, 500, 300);        f.setVisible(true);        //创建菜单栏        MenuBar bar = new MenuBar();        //创建方法setMenuBar        f.setMenuBar(bar);        //创建菜单        Menu newMenu = new Menu("新建");        Menu editMenu = new Menu("编辑");        //菜单栏add添加菜单        bar.add(newMenu);        bar.add(editMenu);        //创建菜单项        MenuItem java = new MenuItem("java");        MenuItem c    = new MenuItem("c语言");        MenuItem copy = new MenuItem("复制");        MenuItem paste = new MenuItem("粘贴");        //菜单项添加到菜单里  菜单方法add        newMenu.add(java);        newMenu.add(c);        editMenu.add(copy);        editMenu.add(paste);        //添加菜单 HTML Menu        Menu html = new Menu("HTML");        //添加菜单项        MenuItem css = new MenuItem("CSS");        MenuItem js = new MenuItem("javascript");        newMenu.add(html);        html.add(css);        html.add(js);        //java菜单,添加活动监听        java.addActionListener(new ActionListener() {               public void actionPerformed(ActionEvent e) {                System.out.println("#########");            }        });    }}

=========================================

文件对话框 FileDialog
FileDialog打开文件对话框,用户可以从中选择文件
文件对话框,不是独立存在
构造器 FileDialog(Frame parent, String title, int mode)

String getDirectory()
获取此文件对话框的目录。
String getFile()
获取此文件对话框的选定文件。

这个知识点比较杂乱,只有多多熟悉猜好办,上几个自己写的列子~~!

public class Demo {    public static void main(String[] args) {        //创建窗口视图        //随即数        final Random r = new Random();        final Frame f = new Frame("qw");        f.setBounds(200, 100, 500, 400);        f.setVisible(true);        //设置严肃        //f.setBackground(Color.getHSBColor(202, 112, 211));        f.setLayout(null);        Button but = new Button("变色龙,请点我");        but.setBounds(300, 170, 85, 40);        f.add(but);        but.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e) {                int x = r.nextInt(200);                                                     int y = r.nextInt(200);                                                     int z = r.nextInt(200);                                                     f.setBackground(Color.getHSBColor(x, y, z));                System.out.println(x+"--"+y+"--"+z);                System.out.println("-----------------------");            }   //          public void mouseExited(MouseEvent e) {//              int x = r.nextInt(200);                                     //              int y = r.nextInt(200);                                     //              int z = r.nextInt(200);                                     //              f.setBackground(Color.getHSBColor(x, y, z));//              System.out.println(x+"--"+y+"--"+z);//          }        });        //窗口监视        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e){                System.exit(0);            }        });    }}
/* *  * MenuBar, //菜单栏 * Menu,//菜单 * MenuItem//菜单项 */public class Demo {    public static void main(String[] args) {        //创建一个窗口         final Frame f = new Frame("qixin");        //定义大小         f.setBounds(300, 200, 500, 400);        //添加背景颜色        f.setBackground(Color.getHSBColor(112, 223,227));               //显示        f.setVisible(true);        //取消区域        f.setLayout(null);                  //窗口监听        f.addWindowListener(new WindowAdapter() {            //重写方法 关闭事件            public void windowClosing(WindowEvent e){                System.exit(0);            }        });         setMenu(f);        txt(f);    }    public static void setMenu(Frame f ){        MenuBar mb = new MenuBar();//创建菜单栏        f.setMenuBar(mb);//窗口方法添加menubar        //创建菜单对象        Menu m = new Menu("喜欢的");        Menu n = new Menu("不喜欢的");        mb.add(m);//菜单栏的方法add添加菜单        mb.add(n);        //创建菜单项        Menu mi = new Menu("柯南");        MenuItem m2 = new MenuItem("大柯南");        Menu mi1 = new Menu("新一");        MenuItem m1 = new MenuItem("小新一");        MenuItem mi2 = new MenuItem("小兰");        MenuItem ni = new MenuItem("内向的");        MenuItem ni1 = new MenuItem("不自信的");        MenuItem ni2 = new MenuItem("躺着也中枪了~");        //菜单添加菜单        m.add(mi);        m.add(mi1);        //菜单项添加到菜单  菜单的方法add()        mi.add(m1);        mi1.add(m2);        m.add(mi2);        n.add(ni);        n.add(ni1);        n.add(ni2);         //菜单有监视机制吗?        mi.addActionListener(new ActionListener() {             public void actionPerformed(ActionEvent e) {                Frame f =new Frame("柯南");                //定义大小                 f.setBounds(300, 200, 500, 400);                //添加背景颜色                f.setBackground(Color.getHSBColor(112, 223,227));                       //显示                f.setVisible(true);                //取消区域                f.setLayout(null);                      //创建文本区域                TextArea ar = new TextArea("吃了药丸变小的工藤新一~~!");                ar.setBounds(45, 105, 380, 280);                f.add(ar);                  ar.setFont(new Font("宋体",Font.BOLD,25));                //窗口监听                f.addWindowListener(new WindowAdapter() {                    //重写方法 关闭事件                    public void windowClosing(WindowEvent e){                        System.exit(0);//崩溃 返回不了上一级了 用多线程?                    }                });             }        });    }    //创建文本框     以及按钮    public static void txt(Frame f ){        //创建文本框        final TextField t = new TextField();        t.setBounds(45, 70, 280, 25);        f.add(t);        //按钮        Button but = new Button("自信");        Button but1 = new Button("不自信");        but.setBounds(360, 70, 55, 25);        but1.setBounds(420, 70, 55, 25);        f.add(but);        f.add(but1);        //创建文本区域         final TextArea ar = new TextArea("看到了千万别生气哦~~!");        ar.setBounds(45, 105, 380, 280);        f.add(ar);          ar.setFont(new Font("宋体",Font.BOLD,25));            //按钮监听机制        but.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e ){                //判断文本框里面是否为空                if ("".equals(t.getText())) {                    return;                }                ar.append(t.getText()+"\r\n");//\r\n可以用System方法获取                t.setText("");            }        });        but1.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e ){                            ar.setText("qixin  你真的很自信哦~!~");            }        });    }}//如果在菜单项这个事件源上加上 监视机制该怎么写那?//应该把相同的直接提取出来
0 0
原创粉丝点击