基于xml创建Java用户界面(精简版)
2005-08-02 13:50
871 查看
1.先写一个uimore.xml
<?xml version="1.0"?>
<ui>
<panel height="40" width="400">
<FlowLayout align="1">
<label caption="Username:"/>
<textfield defaultText="" cols="20"/>
</FlowLayout>
</panel>
<panel height="40" width="400">
<label caption="Password:"/>
<textfield defaultText="" cols="20"/>
</panel>
<panel height="40" width="400">
<FlowLayout align="2">
<button label="login"/>
<button label="clear"/>
</FlowLayout>
</panel>
</ui>
2.写一个增强型的类XMLComponent,完成读数据,加控件的功能。
package common;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import javax.swing.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.SAXParser;
public class XMLComponent extends DefaultHandler
{
private boolean containerActive = false;
private ActionListener listener_ = null;
private JPanel primaryContainer = new JPanel();
private JPanel currentContainer = null;
private SAXParser parser = new SAXParser();
public XMLComponent()
{
super();
}
public XMLComponent( ActionListener listener )
{
listener_ = listener;
}
public JComponent build(String xmlDocument)
{
parser.setContentHandler(this);
try
{
parser.parse(new InputSource(new FileInputStream(xmlDocument)));
} catch (Exception ex)
{
System.out.println(ex);
}
return primaryContainer;
}
public void startElement( String namespaceURL, String name, String qName, Attributes atts )
{
if( currentContainer==null )
{
currentContainer = primaryContainer;
}
if( name.equals("panel") )
{
currentContainer = new JPanel();
Dimension size = new Dimension( Integer.parseInt(atts.getValue("width")),
Integer.parseInt(atts.getValue("height")) );
}
if( name.equals("button") )
{
JButton aButton = new JButton( atts.getValue("label") );
aButton.addActionListener( listener_ );
currentContainer.add( aButton );
}
if( name.equals("label") )
currentContainer.add( new JLabel( atts.getValue("caption") ) );
if( name.equals("textfield") )
{
currentContainer.add( new JTextField( atts.getValue("defaultTxt"),
Integer.parseInt(atts.getValue("cols"))) );
}
if( name.equals("FlowLayout") )
{
currentContainer.setLayout( new FlowLayout( Integer.parseInt(atts.getValue("align"))) );
}
}
public void endElement( String uri, String localName, String qName )
{
if( localName.equals("panel") )
{
primaryContainer.add( currentContainer );
currentContainer = primaryContainer;
}
}
}
3.写事件处理类ButtonClickAction。
package SwingXML;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonClickAction implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println( "You clicked " + e.getActionCommand() );
}
}
4.写主程序,整合所有的类。
package SwingMore;
import javax.swing.*;
import SwingXML.ButtonClickAction;
import SwingXML.SimpleDemo;
import java.awt.*;
import java.awt.event.*;
import java.awt.Event;
import java.io.*;
import common.XMLComponent;
public class SwingDemoMore
{
public SwingDemoMore(JFrame frame)
{
// TODO Auto-generated constructor stub
frame.getContentPane().setLayout( new BorderLayout() );
XMLComponent xmlComponent = new XMLComponent( new ButtonClickAction() );
frame.getContentPane().add( "Center", xmlComponent.build("uimore.xml") );
frame.setVisible( true );
}
public static void main(String[] args)
{
JFrame frame = new JFrame("SwingDemoMore");
frame.setSize(400, 400);
frame.addWindowListener( new WindowAdapter()
{
public void windowClosing( WindowEvent ev )
{
System.exit(0);
}
}
);
new SwingDemoMore( frame );
}
}
<?xml version="1.0"?>
<ui>
<panel height="40" width="400">
<FlowLayout align="1">
<label caption="Username:"/>
<textfield defaultText="" cols="20"/>
</FlowLayout>
</panel>
<panel height="40" width="400">
<label caption="Password:"/>
<textfield defaultText="" cols="20"/>
</panel>
<panel height="40" width="400">
<FlowLayout align="2">
<button label="login"/>
<button label="clear"/>
</FlowLayout>
</panel>
</ui>
2.写一个增强型的类XMLComponent,完成读数据,加控件的功能。
package common;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import javax.swing.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.SAXParser;
public class XMLComponent extends DefaultHandler
{
private boolean containerActive = false;
private ActionListener listener_ = null;
private JPanel primaryContainer = new JPanel();
private JPanel currentContainer = null;
private SAXParser parser = new SAXParser();
public XMLComponent()
{
super();
}
public XMLComponent( ActionListener listener )
{
listener_ = listener;
}
public JComponent build(String xmlDocument)
{
parser.setContentHandler(this);
try
{
parser.parse(new InputSource(new FileInputStream(xmlDocument)));
} catch (Exception ex)
{
System.out.println(ex);
}
return primaryContainer;
}
public void startElement( String namespaceURL, String name, String qName, Attributes atts )
{
if( currentContainer==null )
{
currentContainer = primaryContainer;
}
if( name.equals("panel") )
{
currentContainer = new JPanel();
Dimension size = new Dimension( Integer.parseInt(atts.getValue("width")),
Integer.parseInt(atts.getValue("height")) );
}
if( name.equals("button") )
{
JButton aButton = new JButton( atts.getValue("label") );
aButton.addActionListener( listener_ );
currentContainer.add( aButton );
}
if( name.equals("label") )
currentContainer.add( new JLabel( atts.getValue("caption") ) );
if( name.equals("textfield") )
{
currentContainer.add( new JTextField( atts.getValue("defaultTxt"),
Integer.parseInt(atts.getValue("cols"))) );
}
if( name.equals("FlowLayout") )
{
currentContainer.setLayout( new FlowLayout( Integer.parseInt(atts.getValue("align"))) );
}
}
public void endElement( String uri, String localName, String qName )
{
if( localName.equals("panel") )
{
primaryContainer.add( currentContainer );
currentContainer = primaryContainer;
}
}
}
3.写事件处理类ButtonClickAction。
package SwingXML;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonClickAction implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println( "You clicked " + e.getActionCommand() );
}
}
4.写主程序,整合所有的类。
package SwingMore;
import javax.swing.*;
import SwingXML.ButtonClickAction;
import SwingXML.SimpleDemo;
import java.awt.*;
import java.awt.event.*;
import java.awt.Event;
import java.io.*;
import common.XMLComponent;
public class SwingDemoMore
{
public SwingDemoMore(JFrame frame)
{
// TODO Auto-generated constructor stub
frame.getContentPane().setLayout( new BorderLayout() );
XMLComponent xmlComponent = new XMLComponent( new ButtonClickAction() );
frame.getContentPane().add( "Center", xmlComponent.build("uimore.xml") );
frame.setVisible( true );
}
public static void main(String[] args)
{
JFrame frame = new JFrame("SwingDemoMore");
frame.setSize(400, 400);
frame.addWindowListener( new WindowAdapter()
{
public void windowClosing( WindowEvent ev )
{
System.exit(0);
}
}
);
new SwingDemoMore( frame );
}
}
相关文章推荐
- 基于xml创建Java用户界面(简略版)
- JAVA 基于dom4j创建XML文档
- JAVA Eclipse 创建android xml看不到预览怎么办
- Android疯狂讲义学习笔记——XML布局和java代码共同控制用户界面组件
- Java Web 学习笔记(四) 基于 SpringMVC+BootStrap 创建WebApp
- Java 创建基于Axis的WebService
- 基于socket的上传下载(Java)精简版
- 在独立的环境中通过使用基于 Java 的配置创建和使用Spring 容器
- java 添加一个线程、创建响应的用户界面 。 演示示例代码
- idea 创建Web Service Client 报错 java.lang.AssertionError: org.xml.sax.SAXParseException; systemId:
- flex基础篇一,基于httpservice通信+java后台的项目创建
- XML文档基本认识和基于JAVA对简单解析
- 【JavaWeb-24】AOP介绍和术语、手动/半自动/自动实现AOP、基于XML和注解的AspectJ使用、JdbcTemplate的使用
- 使用 Rational Software Architect 创建基于 Web 服务的 Enterprise Java Bean
- java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)
- JavaWeb开发深入认识并创建XML文件之一
- java(12)--小应用-基于xml的简单考试查询系统
- java创建XML及开源DOM4J的使用
- Java创建XML方法
- java多数据库连接MySQL和SqlServer配置,基于SSM架构,文件名spring-mybatis.xml