您的位置:首页 > 编程语言 > Java开发

JAVA--图形界面化

2015-07-17 22:13 453 查看
图形界面继承体系

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);

d39f
//创建菜单项
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  你真的很自信哦~!~");
}
});
}
}

//如果在菜单项这个事件源上加上 监视机制该怎么写那?
//应该把相同的直接提取出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: