点击它时从JTextArea获取一行

时间:2014-05-25 14:31:14

标签: java swing event-handling mouseevent jtextarea

这仅用于学习目的。

我有两个JTextArea-s:messagearea和chatarea。在messagearea中有一个随机文本,像往常一样,行用\ n分隔。点击一行时,我想将该行附加到chatarea。这是我的代码:

messagearea.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent me)
        {
            if (!messagearea.getText().trim().equals("")) {
                int position = messagearea.viewToModel(messagearea.getMousePosition());
                String[] text = messagearea.getText().split("\n");
                int[] charNum = new int[text.length];
                for (int i = 0; i < text.length; i++) {
                    charNum[i] = text[i].length() + 1;
                }
                int sum = 0;
                for (int i = 0; i < charNum.length; i++) {
                    sum += charNum[i];
                    if (sum >= position) {
                        chatarea.append(text[i] + "\n");
                        break;
                    }
                }
            }
        }
    });

我想知道,如果有更简单的方法可以做到这一点。

非常感谢提前!

1 个答案:

答案 0 :(得分:3)

  

我想知道,如果有更简单的方法可以做到这一点。

这不是一个非常有效的解决方案,因为每次解析整个文档时会随着文本区域中的文本数量的增加而变得更糟。

使用利用文档结构的文本区域方法。类似的东西:

int line = textArea.getLineOfOffset( textArea.getCaretPosition() );
int start = textArea.getLineStartOffset( line );
int end = textArea.getLineEndOffset( line );
String text = textArea.getDocument().getText(start, end - start);