package net.bkm.xulengine4j;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.EventObject;
import java.util.LinkedHashMap;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.text.JTextComponent;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import net.bkm.xulengine4j.interfaces.XULFieldInterface;
import net.bkm.xulengine4j.listeners.XULEventListener;
import net.bkm.xulengine4j.taghandlers.AbstractTagHandler;
import net.bkm.xulengine4j.utils.ErrorManager;
import net.bkm.xulengine4j.xul.XULComponent;
import net.bkm.xulengine4j.dicts.XULElementDictionary;
import net.bkm.xulengine4j.xul.XULTagsHandlerManager;
import net.bkm.xulengine4j.utils.PostProcessor;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Bismay Kumar Mohapatra
*/
public class XULRenderer extends DefaultHandler implements XULEventListener {
private int index = 0;
private int level = 0;
private AbstractTagHandler currentTagHandler = null;
private String parentTag = "XUL4JAVA";
//
protected Vector<XULEventListener> eventListeners = new Vector<XULEventListener>();
protected Vector<AbstractTagHandler> tagHandler = new Vector<AbstractTagHandler>();
protected LinkedHashMap<String, XULComponent> componentMap = new LinkedHashMap<String, XULComponent>();
protected String resource;
protected String name = null;
protected JComponent rootPane;
//
private boolean enableActionEvents = true;
private boolean enableKeyboardEvents = false;
private boolean enableMouseEvents = false;
private boolean enablePropertyChangeEvents = false;
public XULRenderer(JComponent rootPane, String resource, XULEventListener listener) throws Exception {
this.rootPane = rootPane;
this.resource = resource;
if (listener != null) {
addXULEventListener(listener);
}
XULTagsHandlerManager.loadXULRendererWithHandlers(this);
}
public XULRenderer(JComponent rootPane, String resource) throws Exception {
this(rootPane, resource, null);
}
public boolean RenderUI() {
rootPane.removeAll();
parse(resource);
return true;
}
protected void startElement(String nodeName, Attributes attributes) {
if (level == 1) {
parentTag = nodeName;
}
level++;
// System.out.println(">" + parentTag + ">" + XULTagHandlerDictionary.getHandlerCount());
if (nodeName.equalsIgnoreCase("XUL4JAVA")) {
name = attributes.getValue("NAME");
return;
}
if (name == null) {
ErrorManager.PrintError(new IllegalAccessException("XUL File In Not In Proper Format."), XULRenderer.class);
}
currentTagHandler = getTagHandlerForTag(parentTag);
if (currentTagHandler != null) {
Object lastComponent = currentTagHandler.handleTag(nodeName, attributes);
// System.out.println("\t>?>" + nodeName + " " + ((JComponent)lastComponent).getName());
if (lastComponent != null && lastComponent instanceof JComponent) {
JComponent comp = (JComponent) lastComponent;
if (comp.getName().trim().length() > 0) {
componentMap.put(comp.getName().trim(), new XULComponent(comp.getName(), comp, index++));
}
}
} else {
if (nodeName.equals(parentTag)) {
ErrorManager.PrintDebug("Tag Handler Not Found >" + nodeName, XULRenderer.class);
} else {
ErrorManager.PrintDebug("Unhandled Tags>" + nodeName + " Parent Tag>" + parentTag + " TH>" + currentTagHandler, XULRenderer.class);
}
}
}
protected void endElement() {
level--;
// System.out.println("PATH>");
if (currentTagHandler != null) {
currentTagHandler.closeTag();
}
}
protected void processInstructions(String target, String data) {
// System.out.println("PI>" + target + ":" + data);
}
public void ClearAllFields() {
String[] keys = componentMap.keySet().toArray(new String[0]);
for (int i = 0; i < componentMap.size(); i++) {
JComponent comp = componentMap.get(keys[i]).getComponent();
if (comp instanceof JTextComponent) {
((JTextComponent) comp).setText("");
} else if (comp instanceof XULFieldInterface) {
((XULFieldInterface) comp).getFieldComponent().setText("");
}
}
}
public void EnableAllFields(boolean enable) {
String[] keys = componentMap.keySet().toArray(new String[0]);
for (int i = 0; i < componentMap.size(); i++) {
componentMap.get(keys[i]).getComponent().setEnabled(enable);
}
}
public void EnableFieldAt(int index, boolean enable) {
componentMap.get(componentMap.keySet().toArray(new String[0])[index]).getComponent().setEnabled(enable);
}
//Overridden Functions
private void parse(String resource) {
InputStream is = null;
try {
if (new File(resource).exists()) {
is = new FileInputStream(resource);
} else {
try {
URL url = new URL(resource);
is = url.openStream();
} catch (Exception e) {
try {
is = XULElementDictionary.class.getResourceAsStream(resource);
} catch (Exception e1) {
throw new NullPointerException(resource);
}
}
}
if (is != null) {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(is, this);
}
} catch (NullPointerException e) {
ErrorManager.PrintError(e, XULRenderer.class);
} catch (ParserConfigurationException e) {
ErrorManager.PrintError(e, XULRenderer.class);
} catch (SAXException e) {
ErrorManager.PrintError(e, XULRenderer.class);
} catch (IOException e) {
ErrorManager.PrintError(e, XULRenderer.class);
} catch (Exception e) {
ErrorManager.PrintError(e, XULRenderer.class);
}
}
@Override
public void startElement(String uri, String localname, String nodeName, Attributes attributes) throws SAXException {
startElement(nodeName, attributes);
}
@Override
public void processingInstruction(String target, String data) throws SAXException {
processInstructions(target, data);
}
@Override
public void characters(char[] chars, int start, int length) throws SAXException {
StringBuffer sb = new StringBuffer(length);
boolean whitespace = false;
for (int i = 0; i < length; i++) {
char c = chars[start + i];
if (Character.isWhitespace(c)) {
if (!whitespace) {
sb.append(' ');
whitespace = true;
}
} else {
sb.append(c);
whitespace = false;
}
}
if (currentTagHandler != null) {
currentTagHandler.handleCharacters(new String(sb.toString()));
}
}
@Override
pub
没有合适的资源?快使用搜索试试~ 我知道了~
asd.zip_project
共54个文件
java:27个
png:14个
xml:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 191 浏览量
2022-09-21
07:34:27
上传
评论
收藏 77KB ZIP 举报
温馨提示
A project for ip testing
资源推荐
资源详情
资源评论
收起资源包目录
asd.zip (54个子文件)
XULEngine4J v0.1
test
build.xml 4KB
manifest.mf 82B
src
net
bkm
xulengine4j
dicts
XULElementDictionary.java 4KB
NamedFunctionDictionary.java 6KB
XULRenderer.java 15KB
TestMain.java 735B
listeners
XULEventListener.java 252B
ShowDialog.java 4KB
resources
root.png 1KB
funnel.png 743B
refresh.png 1KB
data
errors.xml 1KB
taghandlers.xml 322B
formelements.xml 4KB
tagicons.xml 855B
icon.png 4KB
tree
script.png 3KB
root.png 673B
auxvalues.png 838B
database.png 862B
design.png 800B
template.png 3KB
property.png 1KB
unkown.png 3KB
scriptbox.png 627B
xulcomponent.png 1KB
xul
XULTagsHandlerManager.java 3KB
XULComponent.java 908B
factories
BorderFactory.java 6KB
DataTypeFactory.java 3KB
LayoutFactory.java 6KB
CommonObjectFactory.java 6KB
interfaces
XULFieldInterface.java 479B
XULDataFieldInterface.java 903B
XULDataViewInterface.java 875B
debug
XULTreeDebugger.java 2KB
XULTreeDebugger.form 3KB
DebugXMLTreeHandler.java 2KB
XMLTreeModel.java 5KB
comp
XULTreeCellRenderer.java 4KB
ErrorChecker.java 4KB
utils
ErrorManager.java 5KB
XULUtils.java 6KB
AdvFocusTraversalPolicy.java 1KB
PostProcessor.java 9KB
taghandlers
AuxValuesTagHandler.java 848B
DesignTagHandler.java 9KB
AbstractTagHandler.java 801B
nbproject
build-impl.xml 41KB
private
config.properties 0B
private.properties 209B
project.xml 509B
genfiles.properties 467B
project.properties 2KB
共 54 条
- 1
资源评论
寒泊
- 粉丝: 75
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功