我创建了一个组件,它基本上是一个完全被(不可编辑的)JTextArea
覆盖的 JPanel
。我希望每次单击 JPanel
区域时都会触发 MouseListener
。我确实想将监听器添加到 JPanel
一次,而不是向 JTextArea
添加 n 次。
有没有办法将JTextArea
发送到后台,以便“通过”JTextArea
单击JPanel
?
注意:对于 JLabel
来说,这不需要任何特殊的东西,JPanel
的监听器总是被触发,但我更喜欢 JTextArea
,因为换行符。
最佳答案
With JLabels this works without anything special, the JPanels Listener is always fired
这是因为默认情况下 JLabel 不包含 MouseListener,因此 MouseEvent 会沿父树向上传递,直到找到确实使用 MouseListener 的组件为止。
对于 JTextArea,MouseListener 会添加到文本区域,以便您可以定位插入符号并选择文本等。如果您不需要所有这些功能,您可以使用如下代码从每个文本区域中删除 MouseListener:
JTextArea textArea = new JTextArea(...);
MouseListener[] ml = (MouseListener[])textArea.getListeners(MouseListener.class);
for (int i = 0; i < ml.length; i++)
textArea.removeMouseListener( ml[i] );
但是,由于您必须对每个文本区域执行此操作,因此我建议将 MouseListener 添加到每个文本区域会更容易。您可以与每个文本区域共享相同的 MouseListener。
关于Java:JTextAreas后面的JPanel的MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31265468/