构造JTextArea组件Word格式文档下载.docx

上传人:b****4 文档编号:16570067 上传时间:2022-11-24 格式:DOCX 页数:10 大小:18.20KB
下载 相关 举报
构造JTextArea组件Word格式文档下载.docx_第1页
第1页 / 共10页
构造JTextArea组件Word格式文档下载.docx_第2页
第2页 / 共10页
构造JTextArea组件Word格式文档下载.docx_第3页
第3页 / 共10页
构造JTextArea组件Word格式文档下载.docx_第4页
第4页 / 共10页
构造JTextArea组件Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

构造JTextArea组件Word格式文档下载.docx

《构造JTextArea组件Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《构造JTextArea组件Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

构造JTextArea组件Word格式文档下载.docx

JLabell1=newJLabel("

一:

"

JLabell2=newJLabel("

二:

JLabell3=newJLabel("

三:

JLabell4=newJLabel("

四:

JTextAreat1=newJTextArea();

JTextAreat2=newJTextArea(2,8);

JTextAreat3=newJTextArea("

JTextArea3"

JTextAreat4=newJTextArea("

JTextArea4"

5,10);

t1.setText("

//setText()方法会将原来的内容清除

t2.append("

JTextArea2"

//append()方法会将设置的字符串接在原来JTextArea内容文字之后.

t4.setLineWrap(true);

//设置换行

gbc.gridy=1;

gbc.gridx=0;

p1.add(l1,gbc);

gbc.gridx=1;

p1.add(t1,gbc);

gbc.gridy=2;

p1.add(l2,gbc);

p1.add(t2,gbc);

gbc.gridy=3;

p1.add(l3,gbc);

p1.add(t3,gbc);

gbc.gridy=4;

p1.add(l4,gbc);

p1.add(t4,gbc);

contentPane.add(p1);

f.pack();

f.show();

f.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

在JTextArea中我们可以使用setTabSize()方法设置[Tab]键的跳离距离,或是setFont()方法设置字体。

当我们输入的文字超过

JTextArea的右边界及下边界时,会看不到接下来打的内容,那该怎么办呢?

你可以使用JScrollPane使JTextArea具备滚动的能力,

或是搭配setLineWrap()方法就能让文字自动换行。

JTextArea还提供一个setWrapStyleWord()方法,可以让换行的时候不会造成断

字的现象,这在Word或使用OutLook写信时都可以看到这个效果。

例如我们在行尾中输入“自动换行”四个字,但此行最多只能在容

纳两个字,因此JTextArea会将此四个字均移到下一行,不会造成“自动”在上行,"

换行"

在下行的情形。

这在处理英文输入上较为

重要,因为setWrapStyleWord()是利用空白当作是一个字输入的结果。

我们来看下面的范例:

publicclassJTextArea2{

p1.setLayout(newGridLayout(1,1));

构造TextArea-使用GridLayout,加ScrollBar"

JTextAreat1=newJTextArea(5,25);

t1.setTabSize(10);

t1.setFont(newFont("

标楷体"

Font.BOLD,16));

t1.setLineWrap(true);

//激活自动换行功能

t1.setWrapStyleWord(true);

//激活断行不断字功能

p1.add(newJScrollPane(t1));

//将JTextArea放入JScrollPane中,这样就能利用滚动的效果看到输入超过JTextArea高度的

//文字.

我们再举一个例子,使JTextArea具有copy、paste、cut的功能:

publicclassJTextArea3implementsActionListener{

JTextAreatextarea=null;

JButtonb1,b2,b3;

publicJTextArea3(){

textarea=newJTextArea(10,15);

JScrollPanescrollPane=newJScrollPane(textarea);

JPanelpanel=newJPanel();

panel.setLayout(newGridLayout(1,3));

b1=newJButton("

Copy"

b1.addActionListener(this);

b2=newJButton("

Paste"

b2.addActionListener(this);

b3=newJButton("

Cut"

b3.addActionListener(this);

panel.add(b1);

panel.add(b2);

panel.add(b3);

contentPane.add(scrollPane,BorderLayout.CENTER);

contentPane.add(panel,BorderLayout.SOUTH);

newJTextArea3();

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==b1){

textarea.copy();

if(e.getSource()==b2){

textarea.paste();

if(e.getSource()==b3){

textarea.cut();

9-4-2:

JTextArea的事件处理:

由于JTextArea是一个二维的输入组件,因此[Enter]键在JTextArea中代表的意义只是单纯的换行字符而不再是一个事件驱动的

切入点。

那么我们该如何来处理JTextArea的事件呢?

还记得我们在前面介绍过Listener的机制吗?

相同的,我们一样需要使用

Listener的机制来处理发生在JTextArea中的事件,只是不再是以前提到的ActionListener了。

在JTextArea中使用的Listener有两

种,一个是UndoableEditListener,另一个是DocumentListener.UndoableEditListenerinterface是负责纪录JTextArea中所有操作

发生的顺序并且可以运行还原上一步的功能。

这个功能在目前的软件中应用相当广泛,如文书编辑软件Word中的复原功能、小画家

中的复原功能,相信大家都有使用过。

DocumentListenerinterface则是纪录发生在JTextArea中所有的事件(如键入字符、删除

字符、剪下、贴上)并将所有的事件以树状的层次式结构组织起来;

也就是说当JTextArea中的内容有任何变动时,会DocumentEvent

,此时必须使用DocumentListener接口中的方法来处理此事件。

我们来看下面这个范例,使JTextArea具有复原的功能:

/*由于会使用到复原和事件驱动功能,因此需要将javax.swing.undo和javax.swing.event两个package包含进来

*/

importjavax.swing.undo.*;

importjavax.swing.event.*;

/*JTextArea4类继承JFrame类并实作UndoableEditListenerinterface.实作UndoableEditListenerinterface就必须要编写其中的

*undoableEditHappened().

publicclassJTextArea4extendsJFrameimplementsUndoableEditListener{

privateUndoableEditedit;

privateJTextAreajta;

privateJTextAreamessage;

privateJMenuItemundoitem;

privateJMenuItemredoitem;

publicJTextArea4(){

super("

jta=newJTextArea();

jta.getDocument().addUndoableEditListener(this);

//将JTextArea加入UndoableEditListener.

message=newJTextArea();

message.setEditable(false);

//利用setEditable()方法将另一个JTextArea设置为不可编辑.

JPanelp1=newJPanel();

EditArea"

p1.add(newJScrollPane(jta));

//--begin:

分别将两个JTextArea通过JPanel放到JFrame中。

JPanelp2=newJPanel();

p2.setLayout(newGridLayout(1,1));

p2.setBorder(BorderFactory.createTitledBorder("

Message"

p2.add(newJScrollPane(message));

getContentPane().setLayout(newGridLayout(2,1));

getContentPane().add(p1);

getContentPane().add(p2);

//--end

//建立目录菜单并放置到JFrame中.

JMenuBarbar=newJMenuBar();

JMenutheMenu=newJMenu("

Edit"

undoitem=newJMenuItem("

Undo"

redoitem=newJMenuItem("

Redo"

theMenu.add(undoitem);

theMenu.add(redoitem);

bar.add(theMenu);

updateMenuItem();

//构造目录菜单

setJMenuBar(bar);

setSize(300,300);

//采用innerclass方式,分别构造菜单选项被点选后的运行操作。

分别调用undo(),redo()方法来完成.

undoitem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventev){

edit.undo();

//运行undo功能

message.append("

-Undo-\n"

redoitem.addActionListener(newActionListener(){

edit.redo();

//运行redo功能

-Redo-\n"

}//endofJTextArea4()

publicvoidundoableEditHappened(UndoableEditEventev){

StringBufferbuf=newStringBuffer(200);

/*当用户在TextArea中有所操作时,就可以用getEdit()方法取得UndoableEdit对象,此对象纪录着刚刚用户的操作,因

*此可由些对象的undo()或redo()达到取消或复原的功能.

edit=ev.getEdit();

buf.append("

undoableEdit:

buf.append(edit.getPresentationName());

\n"

message.append(buf.toString());

}//endofundoableEditHappened()

//判断是否此时是否可以运行undo或redo的功能,并且改变目录菜单的状态值.

publicvoidupdateMenuItem(){

if(edit!

=null){

undoitem.setEnabled(edit.canUndo());

redoitem.setEnabled(edit.canRedo());

undoitem.setText(edit.getUndoPresentationName());

redoitem.setText(edit.getRedoPresentationName());

}else{

undoitem.setEnabled(false);

redoitem.setEnabled(false);

undoitem.setText("

redoitem.setText("

}//endofupdateMenu()

publicstaticvoidmain(Stringargs[]){

JFramef=newJTextArea4();

f.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

}//endofmain()

}//endofclassJTextArea4

我们在前面提到Enter键在JTextArea中不再是事件驱动的切入点,因此我们要利用Listener的机制来控制JTextArea的事件驱动

但是,我们要怎么样知道在JTextArea中的数据内容呢?

这就要了解JTextArea的存储模式了,JTextArea把输入区内的每一行当成

一个独立的单无(Element),并依照Document内规划的树状结构来存储,也就是说在JTextArea的第一行属于Element0、第二行属于

Element1、第三行属于Element2等等。

不论我们在费心的去处理。

接下来我们来看看,Element和DocumentListenerinterface的

用法。

我们改写JTextArea4.java加入DocumentListener,将程序存储为JTextArea5.java.

importjavax.swing.text.*;

publicclassJTextArea5extendsJFrameimplementsUndoableEditListener,DocumentListener{

publicJTextArea5(){

JTextArea"

jta=newJTextArea();

jta.getDocument().addDocumentListener(this);

}//endofJTextArea5

messag

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1