swing_xml框架的使用文档

来源:互联网 发布:天空之城软件站 编辑:程序博客网 时间:2024/06/05 19:05

前言:

框架jar包:swing_xml.jar
框架源码:http://git.oschina.net/kk_wdj/swing_xml
该框架是我在写java课程设计时,在写界面代码时,联想到android中对界面的处理,觉得可以用xml来描述swing界面,这样就可以简单的写课程设计。不过,该框架只是我打发时间时随机一动的小想法,没有多高的完成度,只是简单的可以实现。

特别提醒:本框架只是个人随意写的而已,bug应该估计肯定多得不行吧,是吧?因为我写好了,就简单测试了一下而已,没有详细的进行测试,如无法解决你的问题,望请谅解

例子 :

xml文件

<v_layout gravity="horizontal" width="match_parent" height="match_parent">    <h_layout width="wrap_content" gravity="vertical">        <label text="姓名:" width="60"></label>        <text ></text>    </h_layout>    <h_layout width="wrap_content"  gravity="vertical">        <label text="学号:" width="60"></label>        <text id="aa"></text>    </h_layout>    <h_layout width="wrap_content"  gravity="vertical">        <label text="性别:" width="60"></label>        <text ></text>    </h_layout>    <h_layout width="wrap_content"  gravity="vertical">        <label text="学科:" width="60"></label>        <text ></text>    </h_layout>    <h_layout gravity="vertical">        <button id="bb" text="添加" margin_left="10" margin_right="10"></button>        <button text="删除" margin_left="10" margin_right="10"></button>        <button text="修改" margin_left="10" margin_right="10"></button>        <button text="查询" margin_left="10" margin_right="10"></button>    </h_layout></v_layout>

使用代码

MyFrame frame = new MyFrame("asd");frame.inflate(new File("src/asd.xml"),300,200);frame.show();

这里写图片描述

使用说明:

1、xml文件中的节点和属性的使用方法
目前只有5个控件可以使用(如果有其他的控件想做可以才能考第三点)


现在开始介绍每一个控件都有的共有属性
width:设置控件的宽度。
属性值:
match_parent:让该控件的宽度跟父布局的宽度一致
wrap_content:宽度由控件的自己想要的宽度决定
具体的数字 :如width=”100”,就是指控件的宽度就是100

height:设置控件的高度,对应上述width

margin_xxx:在不同方向上跟其他控件的间距(margin_top在控件上方的间距,margin_bottom控件下方的间距,margin_left和margin_right同理)
属性值:只能是具体数字,表示间距大小

id:用于唯一标志控件的编号,由字符串组成


现在开始介绍不同控件中不同的属性
布局控件:v_layout和h_layout用于描述布局中控件的排列方式

v_layout:垂直布局,使在该布局中的组件以垂直方式排列
目前已有属性:gravity
属性介绍:
gravity:描述布局中控件的对齐方式,
属性值:
vertical,描述布局中的控件的对齐方式为垂直居中
horizontal,描述布局中的控件的对齐方式为水平居中
center,描述布局中的控件不仅水平居中,而且垂直居中
特别说明:width和height中的wrap_content指其长度由布局中的控件长度相加,而且子控件中的match_parent会以wrap_content处理

h_layout:水平布局,使在该布局中的组件以水平方式排列
属性介绍:同v_layout

以下介绍对swing控件进行封装的控件
Button:在xml中用button表示,对应的swing控件为JButton
属性:text,描述button中的文字

Label:在xml中用label表示,对应的swing控件为JLabel
属性:text,描述label中的文字

Text:在xml中用text表示,对应的swing控件为JTextField
属性:text,描述button中的文字


2、关于id的三个api和一些字段
为了加强框架的作用,为此设计了3个简单的api
getTextById(String id):获取对应控件的文本信息,参数为在xml文件中的id(要求控件要实现TextView接口)
addListener(String id,ActionListener l):将监听器添加到对应的控件上
findCptById(String id):直接获取封装的控件
字段:
component字段是每个继承ComponentView中的swing控件的对象。
frame字段是每个MyFrame中的JFrame对象。
(因为这个框架不可能面面具到,所以将控件暴露出来,可以实现其他的功能)


3、自定义控件
如果上述的控件无法满足需求,那么还可以自己定义自己的控件。
注:在自定义控件时,要将控件写在自己独立的类文件中,用public修饰类。

先上一段通过ComponentView<T>自定义控件的代码:
public class Table extends ComponentView<JTable>                          implements TextView{    public Table(MyFrame frame,                 org.jsoup.nodes.Element e,                JPanel panel) {        super(frame, e, panel);    }    //返回对应swing控件    @Override    public JTable create(int width, int height) {        JTable t = new JTable();        t.setSize(i,i1);        return t;    }    @Override    public int getWrapWidth() {        return 100;    }    @Override    public int getWrapHeight() {        return 100;    }    //自定义属性    @Override    public void onOtherAttr(String key, String value) {        if (key.equals("asd")) System.out.println(value);    }    int count=0;    @NotNull    @Override    public String getText() {        return String.valueOf(++count);    }}

继承ComponentView类时要在泛型上写上要封装的swing控件
字段:
component为在调用create方法后保存的swing控件对象
重写方法:
create函数中的参数width,height为控件的宽高,在函数内创建对应的控件,并为其设置大小,以及其他操作

getWrapWidth(),getWrapHeight()返回值为控件的默认宽高,即在宽高的属性值是wrap_content时的宽高

onOtherAttr(String key,String value) key是属性名,value是属性值,这样就可以自定义控件的属性,从而实现方便的功能

getText(),该方法是TextView接口中的方法,从而让该控件可以使用getTextById()这个api,函数中写上对应的获取swing控件所需要的文本信息(上述例子因为封装的是JTable,故随意写的内容)

注册到框架中:

        MyFrame.Companion.registerCpt("table",Table.class);

在使用自定义的控件的时候,是调用上述方法注册到框架中,第一个参数是xml文件描述中的元素,第二参数是相关类


总结

一个好的架构是非非常长重要的,不仅能让你快速的写代码,更能让你在变动时,更方便的解决问题。
在debug的时候,发现java中的内部类的构造器,默认是有外部类的参数的org。
最后,发现写了这个框架,也没有用到的地方,因为写课程设计还要写文档,如果使用这个框架,感觉文档要不少,不如我乖乖写那些重复代码比较好/(ㄒoㄒ)/~~。

原创粉丝点击