分享
 
 
 

使用JavaSwing创建一个XML编辑器之二

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

在本文中,我们将创建我们的XML编辑器的框架,为了达到这个目的,我们将用到许多Swing组件(包括JsplitPane、JscrollPane、Jbutton和JtextArea组件)。

一、问题的提出与解决

我如何创建一个能够浏览文本和浏览视图的XML文本编辑器呢?创建一个包含Jbutton和JsplitPane的Jframe对象, 然后让JsplitPane对象包含两个JscrollPane对象,一个用于浏览图形(xTree类),另一个用于浏览文本(JtextArea类)。Jbutton用来管理刷新图形浏览的操作。

二、增强Xtree类的功能

在上一篇文章中,我们开发了Xtree类,这是一个可重用的组件,继承于Jtree类并能够把XML数据以图形树的形式显示。我们现在就增强这个类, 通过提供给它一个在显示默认的XML树来We will now enhance that class by providing it with a default XML

tree to display in the event that an XML file is not supplied at the command-line. 而且,我们还将添加一些错误处理逻辑以便程序不会因为无效的XML而崩溃。

第一步是创建一个名为buildTree()的方法:

private DefaultTreeModel buildTree( String text )

{

DefaultMutableTreeNode treeNode;

Node newNode;

// 采用DOM根节点并把它转化成为一个Tree模型

newNode = parseXml( text );

if ( newNode != null )

{

treeNode = createTreeNode( newNode );

return new DefaultTreeModel( treeNode );

}

else

return null;

} file&://结束buildTree()

这个方法取得传入的 XML字符串,分析这个 XML字符串并构造一个可以用来从数据中构造图形树形结构的DefaultTreeModel变量实例。这个功能原来包含在 XTree()构造程序中,但是我们把它拿出来然后把它放进一个单独的方法中,这样我们就有了创建一个默认图形树的伸缩性。这就是我们接下来想做的事。

接下来一步是创建一个叫 buildWelcomeTree()的方法。这个方法一次构建一个DefaultTreeModel变量,而不是通过分析一个现有的XML文字字符串。如果用户没有指定 XML文件就启动这个应用程序,将显示 DefaultTreeModel。见代码段1

代码段1:

private DefaultTreeModel buildWelcomeTree()

{

DefaultMutableTreeNode root;

DefaultMutableTreeNode instructions, openingDoc,

editingDoc, savingDoc;

DefaultMutableTreeNode openingDocText, editingDocText,

savingDocText;

DefaultMutableTreeNode development, addingFeatures,

contactingKyle;

root = new DefaultMutableTreeNode( \"Welcome to XML View 1.0\" );

instructions = new DefaultMutableTreeNode( \"Instructions\" );

openingDoc = new DefaultMutableTreeNode

( \"Opening XML document.\" );

openingDocText = new DefaultMutableTreeNode

( \"When invoking the XmlEditor from

the command-line, you must specify the filename.\" );

editingDoc = new DefaultMutableTreeNode

( \"Editing an XML document." );

editingDocText = new DefaultMutableTreeNode

( \"XML text in the right hand frame

can be edited directly.

The \\"refresh\\" button will rebuild

the JTree in the left frame.\" );

savingDoc = new DefaultMutableTreeNode

( \"Saving an XML document." );

savingDocText = new DefaultMutableTreeNode

( \"This iteration of the XmlEditor does

not provide the ability to save your

document. That will come with the

next article.\" );

root.add( instructions );

instructions.add( openingDoc );

instructions.add( editingDoc );

openingDoc.add( openingDocText );

editingDoc.add( editingDocText );

return new DefaultTreeModel( root );

}

接下来的我们需要添加一个新的构造程序来简化默认显示功能,我们将修改主构造程序,这样它就不能接受任何参数,创建一个新的能接收单一的 XML文本字符串的构造程序。这样以来,如果没有 XML文本被显示的话就会创建默认 XTree对象,而如果 XML文本被显示的话将创建一个唯一的 XTree对象。代码段2中给出了两个构造程序。

代码段2:

public XTree( String text ) throws ParserConfigurationException

{

this();

refresh( text );

}

public XTree() throws ParserConfigurationException

{

super();

getSelectionModel().setSelectionMode(

TreeSelectionModel.SINGLE_TREE_SELECTION );

setShowsRootHandles( true );

setEditable( false );

dbf = document.uilderFactory.newInstance();

dbf.setValidating( false );

db = dbf.newdocument.uilder();

setModel( buildWelcomeTree() );

}

三、创建 XmlEditor类

XmlEditor类与前面的那篇文章的XTreeTester类有相同的用途,不同之处在于 XmlEditor包括一个 JTextArea,允许你操作文本版XML。之后,你可以点击 “Refresh”按钮并查看 XTree组件中反映出来的变化。

如果直接修改第一篇文章中的代码,你就能节省很多时间,你可以把 XTreeTester.java文件重命名为 XmlEditor.java (不过一定要修改构造程序 )并把它当成模板文件。

要做的第一件事是添加下列 Swing组件:另一个 JScrollPane、 JSplitPane、 JTextArea和 JButton。通过声明所有的这些组件以及其他组件开始(看代码段3)。

代码段3:

private XTree xTree;

private JScrollPane jScroll, jScrollRt;

private JSplitPane splitPane;

private JButton refreshButton;

private WindowListener winClosing;

首先,我们将创建并添加“ Refresh”按钮。这个按钮用来指示这个 XTree组件将使用当前 XML文本来刷新。我们还需要使用一个ActionListener来注册它。(参见代码段 4 ) 为了拦截按钮事件,我们需要有这个类还要实现 ActionListener,而且我们还需要创建一个 actionPerformed()方法 (参见代码段 5 )。

代码段4:

refreshButton = new JButton( \"Refresh\" );

refreshButton.setBorder(

BorderFactory.createRaisedBevelBorder() );

refreshButton.addActionListener( this );

getContentPane().add( refreshButton, BorderLayout.NORTH );

代码段5:

public void actionPerformed( ActionEvent ae )

{

if ( ae.getActionCommand().equals( \"Refresh\" ) )

xTree.refresh( textArea.getText() );

}

接下来,我们将创建新的 JScrollPane和 JTextArea并且把 JTextArea添加到 JScrollPane中。这样,我们将得到包含 XTree组件的原始的 JScrollPane和包含 JTextArea组件的新的 JScrollPane。这个原始的 XTree构造程序还有一个修改之处。我们将删除先前传进这个方法的字符串参数。(该功能通过我们接下来要构建的另一个 XmlEditor()构造程序操作)我们把这两个方框放进一个 JSplitPane中,它是一个有分隔器的组件,可以在这个分隔器的另一边包含一个组件。(参见代码段6)。

代码段6:

jScroll = new JScrollPane();

jScrollRt = new JScrollPane();

textArea = new JTextArea( 200,150 );

jScrollRt.getViewport().add( textArea );

xTree = new XTree();

xTree.getSelectionModel().setSelectionMode(

TreeSelectionModel.SINGLE_TREE_SELECTION );

xTree.setShowsRootHandles( true );

xTree.setEditable( false );

jScroll.getViewport().add( xTree );

splitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT,

jScroll, jScrollRt );

splitPane.setOneTouchExpandable(true);

splitPane.setDividerLocation(200);

minimumSize = new Dimension(200, 150);

jScroll.setMinimumSize( minimumSize );

jScrollRt.setMinimumSize( minimumSize );

splitPane.setPreferredSize( new Dimension(400, 300) );

getContentPane().add( splitPane, BorderLayout.CENTE

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有