【发布时间】:2016-01-08 07:24:23
【问题描述】:
在代码的不同部分为 JComponent 添加少量侦听器是一种好习惯吗?我应该创建一个更大的听众吗?
例如我有 JTextField,我注意到两个 KeyListener 都被调用了。
JTextField textField = new JTextField();
textField.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
something();
}
});
textField.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
somethingElse();
}
});
【问题讨论】:
-
它只是一个 DocumentListener/Filter,不要使用 KeyListener
-
也许改用 KeyAdapter 会更好。这个类有空方法,所以你只需要覆盖非空的。还要考虑错误处理,即用 try-catch 块包围处理程序的内容。
-
好吧,将
KeyListener与文本组件一起使用是不好的做法。在同一个组件上使用多个侦听器是否是一种好习惯,通常是的。将一次性侦听器与组件一起使用是一种好习惯,是的。有一个大听众,恕我直言,不,这是一种好习惯。原因是,您希望创建小型工作单元来完成一项单独的、独立的工作。当然,您也许可以抽象出一个允许您重用的侦听器,但是拥有一个单一的整体侦听器只是维护的噩梦 -
正如@mKorbel 已经写过的,如果你想监控文本组件中的文本变化,你应该使用DocumentListener or DocumentFilter
-
@MadProgrammer 你能回答这个问题,我可以给你正确的答案吗?
标签: java swing jtextfield keylistener