GUI



1、new对象:在内存产生了窗体 JFrame frame = new JFrame();
工具类:Toolkit tk = Toolkit.getDefaultToolkit();
private Container contentP = this.getContentPane() ; //得到JFrame内容面板;
private JLabel usernameLab; //设置标签; 【匈牙利命名法:主键做什么的+Lab(标签)
//设置外部图片标签;
//设置按钮;
//文本框;
//密码框; 密码的用“*显示
//下拉框: 预先写东西 addItem(“”); 预先没有选中;
设置可编辑 setEditable(true);
//单选框J: JRadioButton 绑定为一组互斥关系;ButtonGroup .add;
设置:单选框中默认选中;
//复选框JCheckBox: 不用绑定互斥关系;
//文本域JTextArea: 文本框是单行; 文本域是多行没有外边框;
添加外边框功能:setBorder( BorderFactory.createLineBorder( Color.BLACK ) )
//滚动条JScrollPane :
//按钮不可按:setEnabled(flash);

2、
设置大小:setSize(水平,垂直); 单位:像素//屏设置像素后就会变大变小 frame.setSize(700,1024);
设置位置:原点坐标(放在谁身上,谁的左上角就是原点;);
setLoction(int,int); frame.setLoction(水平,垂直);
如何设置在中间:frame.setLoction((屏水平-水平)/2,(屏垂直-垂直)/2);
设置标题: setTitle(“”);
设置图片: setIconImage( tk.createImage(“文件路径”) );
设置窗体不可变:setResizable(false);
设置窗口关闭即退出:setDefaultCloseOperation(this.EXIT_ON_CLOSE);
【添加内容到内容面板】
setBackground(Color. 颜色); 设置窗体的颜色 颜色被内容面板给覆盖了;
this.addContent(); //调用添加中间容器的方法;


调用方法:setVisible(true); frame.setVisible(true);
// 可视化 放在最后,设置好窗体再放出来;
3、自定义窗体完成:将第二种的方法设置在自定义窗体类的构造方法中;

4、添加中间容器到内容面板:
private void addContent(){
this.contentP .setBackground(Color.颜色);
this.contentP .setLayout(null); //设置内容面板的管理器为空,组建位置大小才会起作用;
//组件使用:成员变量已定义;
this.usernameLab = new JLable(); // 产生组件对象;
this.usernameLab.setText(“用户名”); 设置标签文本;
this.usernameLab.setFont(字体,字形Font. ,24) 设置文本字体;
this.usernameLab.setForeground(new Color(203,86,220)) 三原色进行调色【红、绿、蓝】;
this.usernameLab .setSize(80,30); 设置文本大小;
this.usernameLab .setLocation(0 ,0 ); 设置原点位置;
//调试标签大小位置的特有代码--调完以后注释掉;
//this.usernameLab.setBorder( BorderFactory.createLineBorder( Color.BLACK ) ); 添加外边框

this.contentP.add( this.usernameLab ); 将设置的组件加入到面板中;


//设置图片标签:
//产生对象
//设置对象地址
//设置对象大小
//设置对象原点
//加入面板;

//设置按钮:
同上:
//一次性设置方法大小,位置: setBounds(位置,,大小,)

}



第二步:中间容器: :JPanel;
public class UpPanel excend JPanel{ }
属性:
构造器:设置面板背景色、面板管家为空(setLayout(null);)、调用添加组建功能;、设置文字边框:setBorder( BorderFactory.createTitledBorder(“Guess”));
createLineBorder:边框线颜色设置;【API】;
方法:添加组建(没有控制面板,直接加到中间容器)
public class Panel excend JPanel{ }
public class DownPanel excend JPanel{ }

public class YourFrame excend JFrame{ } 首层容器的面板
// 设置控制面板的颜色,内容为空;
//然后将三个面板分别放进去; 设定三个面板的大小;



第三步:事件处理
①普通事件处理:
1、普通事件:按钮,给按钮一定的特定行为,告诉他一旦被点将进行什么操作;
2、使用者:
②委托事件处理: Java事件处理模型;【这种模型要写两种对象:事件源对象、事件的侦听对象】
参与者:
1、按 钮:事件源;//GUI对象的行为就是事件,这种行为可以是对按钮的点击;
2、监听者:功能:监听,绑定;
负责事件的处理:①1个监听器可以监听多个事件源; ②一个事件源可以绑定多个监听器,每个监听器监听不同的事件, 监听器必须和事件源绑定,绑定才能帮你处理; (作用: 一个事件源的不同事件引发不同的监听行为)
3、操作者:
注册侦听者步骤
1、先书写 事件源对象
2、根据要处理的事件类型 选择相应的 事件监听器;【事件、鼠标、键盘...】
3、把要做的这个事情( 功能)实现在监听器的特殊方法里面;【Event通过形参传入】
4、把监听器对象和事件源对象绑定上;
③事件监听器类型:(*** Listener) 最顶上的接口监听器:EventListener;
子接口监听器: 鼠标监听器(5个构造方法;)、键盘监听器、 ActionListener(动作行为监听器-监听默认点击行为)、 ChangeListener(改变状态监听器“张三”变“李四”);
形参的类型:Event,是XX的事件源对象被传给构造方法;

【案例】:演示:注册侦听步骤;侦听器示例
第一步:在一个控制面板中写入两个按钮(事件源:“警报”“接触警报”)--
第二步:选择监听器( ActionListener),并实现这个接口;
第三步,书写功能:警报类继承 ActionListener 接口; 重写方法(actionperformed())在方法中加形参;
第四步:绑定监听器和功能: new的按钮中添加功能接口(add ActionListener()),将书写的功能作为形参传入;

第一种监听器实现方法:按钮和事件源相互独立:
打开控制器:形参(new Loyer())
第一种情况:一个监听器一个事件源;---单一监听器更好!

第二种情况:一个监听器,可以监听多个有相似功能的多个事件源;
监听器方法中的形参ActionEvent;可以用它掉事件源(),并进行强转;
【ActionEvent】的方法,可以返回发生时间、返回与此相关的命令字符串、
evet.getSource()获得事件源; 强转为Jbutton类型 jb;
进行判断(jb.getText.equals()): 事件源是哪个按钮的事件源;
在控制面板方法中将监听器功能依次加入按钮;


第三种情况:点监听器,整个背景色变色(红色、绿色);
【难点】:如何将控制面板中的控制面板传入监听器成员变量,以判断情况改变控制面板的颜色:(方法:1、构造方法形参传入; 2、监听器提供get/set方法,将控制面板设置进去;

第二种监听器实现方法:让容器既成为事件源又充当监听器,无需单独书写类;
特点:1、无法为每个事件源单独书写监听器类,只能让不同的事件源共用一个监听器;
2、如果要在监听器功能中操作当前容器身上的组件或子容器,可以不用传参;
实现方法:在控制面板类中实现ActionListener方法:然后重写actionperformed()方法;
绑定方法 this.redBtu.addActionListener(this); 绑定自己;

第三种监听器实现方式:匿名内部类实现以上两种的优势
特点:1、为每个事件源书写单独的监听器;
2、操作本容器的组件或子容器无需传参;
在添加组建的方法内部,重写接口方法;
this.redBtu.addActionListener( new ActionListener(){ //按钮绑定监听者调用监听方法
重写方法:public void actionperformed(){ //预警行为执行方法;
重写....... 外部类. this.contentP.setBackground(); //区分内部类的成员变量和外部成员变量;
redBtn.setEnable(false)
greenBtn.setEnable(ture) 红色和绿色只能交替点击;
}
} )

【匿名内部类情况2】当使用匿名内部类,仅需要重写很多方法中的一部分的时候;
【实例4】:当打开关闭窗体的时候,弹出一个窗口之上的窗口;
适配器(类){XXX Adapter}: 将监听器的所有方法进行了重写,全是空实现;只需要在使用的几个重写就可以了;
使用:在类的构造器中添加:
this.addWindowListener( new WindowAdapter(){
public void windowOpened(WindowEvent arg0){
JOptionPane. showMessageDialog 主类.this ,“欢迎打开界面”);
} )

弹窗方法介绍:
//消息框弹窗: 空:在桌面中间,容器内在容器中间;
JOptionPane. showMessageDialog(null,“我是一个消息框”);

//输入框窗口
【注意】:小心这里空指针异常;
如果没有输入,点击《确定》按钮,返回空串; “”
如何没有输入,点击取消按钮,返回空; null;

JOptionPane. showInputDialog(null,“请输入存入的金额:”);
//输入的全是字符串, 用String inputStr = 接;
用正则表达式校验; 然后转成所需要的字符;

//确定框: 是:返回0 否:返回1 取消:返回2;
JOptionPane. showConfirmDialog(null,“请输入存入的金额:”);

3、布局管理器
一、边界布局管理器: 窗体内容面板自带 ---BorderLayout--窗体内管理面板自带【 主要用于放容器
特点1:把整个容器划分为5个部分:东西南北中, 南北要贯通,中间最大;南北的内容大小是自动调节的, 必须用Flow(流布局)来撑【不能用空布局来撑,】;最大也只能撑1/3的空间;
特点2:中间最大不仅仅 面积最大,权利最大;其他不设定,中间会占领周边,中间不在,周边不能占领中间
特点3:作用是把一个大的界面划分成多个小的界面,主要是放容器的;
this.contentp.add( this.btn1 , BorderLayout. NORTH )北管理器;
二、流布局管理器:---FlowLayout ---Jpanel默认的布局管理器;【 主要用于放组件的
特点1:按照添加的顺序,从上到下,从左到右,自动放置中间组建;
特点2:组建的位置会根据容器的大小改变而改变,因此适用于大面积容器,最好是单行容器
特点3:组件的大小会根据组件的内容来控制;不会认设置大小的设定; 调用方法:setColumns( int );来设置宽度;

三、网格布局管理器:----GridLayout---【 主要用于放等分容器
特点1:当容器按照行列,划分为等大的几个部分;
特点2:当放入的组件和子容器的个数与设置的个数不匹配时,优先满足行,列的数量是可以变化的;
特点3:主要用于等分一个大容器为多个等大的小容器;
初始化:this.contentP.setLayout( new GridLayout( 3 , 2 ) ); 3行2列;
四、卡片布局:--- CardLayout() ----【用于卡片翻页,一页覆盖一页】; 【重点】
特点1:容器中的皮按照顺序按最上面到最下面的顺序存放,身上至少贴上一张皮;
特点2:翻页功能:this.nextBtn.addActionListener( new ActionListener ){
public void actionPerformed( ActionEvent arg0 ){
要最大的调用者Frame,通过形参的方式传进来 //向上级要;并且所有的类提供get/set方法;
卡片翻页操作: CardLayout cardL = (CardLayout ) picP。getLayout();
调用卡片布局方法,完成操作: cardL。next(picP); 最后一页:cardL。last(picP);
首页: cardL。first(picP); 向上翻:cardL。previous(picP);
固定其中一页cardL。show(picP);
}
}
五、集中布局组合应用
第一步:思考如何进行布局,组合应用布局管理器
第二步:将这些布局管理器的大小,位置确定
第三步:软件实施:
首先设置网格布局管理器;
其次,书写输入中间容器、消息中间容器、按键中间容器;设置三个容器颜色,查看位置设置是否正确;
然后,将三个不同的容器发给不同的人;

【如何在复杂程序编程】:
1、小技巧:将主要汇总调用类作为形参,传入其他子类中;
2、找到事件源所在的类(按钮所在的类);
3、将所有类中的属性提供get/set方法;
4、将所有的类,制作成图,然后将传参线画出来,并进行实施;
5、通过调用主类来完成所有动作!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值