首页 > 编程知识 正文

java怎么实现多个按钮的监听,java设置监听器

时间:2023-05-06 01:33:24 阅读:176919 作者:1363

对此,通常的回答是“使用文档监听器”,但我总是觉得界面很麻烦。 其实,界面设计过度了。 有三种插入、删除和替换文本的方法,但只需要一种方法。 (插入操作假定用特定文本替换没有文本的文本,而删除操作假定用某些文本而不是文本替换。 )

典型的DocumentListener实现通常有三种方法调用一种方法,因为您只需要知道框中的文本发生了更改。

因此,创建了以下实用程序方法: 可以使用更简单的change监听器,而不是文档监听器。 ()使用Java 8的lambda语法,但如果需要,也可以在旧的Java中使用。 /**

* installsalistenertoreceivenotificationwhenthetextofany

* { @ codejtextcomponent } is changed.internally,itinstallsa

* { @ linkdocumentlistener } onthetextcomponent ' s { @ link document },

* anda { @ linkpropertychangelistener } onthetextcomponenttodetect

* ifthe { @ code document } itselfisreplaced。

*

*@paramtextanytextcomponent,suchasa{@linkJTextField}

*or{@linkJTextArea}

* @ paramchangelisteneralistenertoreceieve { @ linkchangeevent } s

*whenthetextischanged; thesourceobjectfortheevents

*willbethetextcomponent

* @ throwsnulpointerexceptionifeitherparameterisnull

*/publicstaticvoidaddchangelistener (jtextcomponenttext,ChangeListenerchangeListener ) {

objects.requirenonnull(text;

objects.require nonnull (change listener );

documentlistenerdl=newdocumentlistener {

privateintlastChange=0且lastNotifiedChange=0;

@Override

publicvoidinsertupdate (文档版本) {

变更更新(e );

}

@Override

publicvoidremoveupdate (文档版本) {

变更更新(e );

}

@Override

publicvoidchangedupdate (文档版本) {

最后变更;

SwingUtilities.invokeLater (

最后变更(if )!=lastChange ) {

lastNotifiedChange=lastChange;

change监听器. state changed (newchangeevent ) text );

}

);

}

(;

text.addpropertychangelistener (' document ),) PropertyChangeEvente

documentD1=(document ) e.getOldValue );

documentD2=(document ) e.getNewValue );

if(D1!=空(D1.removedocumentlistener ) dl;

if(D2!=null ) D2.adddocumentlistener(dl;

dl.changed update (空;

);

文档d=text.get document (;

if(d!=null(d.adddocumentlistener ) dl; }

与将侦听器直接添加到文档不同,这是为了在文本组件中安装新的文档对象。 另外,也可以解决在此描述的问题。 mmydbl的回答、文档可能会触发比所需事件更多的事件。

无论如何,此方法都可以替换棘手的代码,如some textbox.get document (.adddocumentlistener (newdocumentlistener ) )。

@Override

publicvoidinsertupdate (文档版本) {

doSomething (;

}

@Override

publicvoidremoveupdate (文档版本) {

doSomething (;

}

@Override

publicvoidchangedupdate (文档版本) {

doSomething (;

}; );

有: addchangelistener(sometextbox,e-doSomething ) );

向公共域公开代码。 好好享受!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。