我创建了一个基本上是JPanel完全覆盖(不可编辑)JTextAreaMouseListener组件。我希望每次单击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/

10-14 07:39