我创建了一个基本上是JPanel
完全覆盖(不可编辑)JTextArea
的MouseListener
组件。我希望每次单击JPanel
区域时都触发一个JPanel
。我确实想将监听器一次添加到JTextArea
而不是n次添加到JTextArea
。
有没有一种方法可以将JPanel
发送到后台,以便通过“ JTextArea
”单击“ JLabel
”?
注意:使用JPanel
可以正常工作,JTextArea
侦听器总是被触发,但是我更喜欢,因为换行了。
最佳答案
使用JLabels可以正常工作,并且始终会触发JPanels侦听器
这是因为默认情况下,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 - Java:JTextAreas之后的JPanel的MouseListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31265468/