点击它时从JTextArea获取一行[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

这仅用于学习目的。

我有两个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;
                    }
                }
            }
        }
    });

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

提前谢谢了!

java swing event-handling mouseevent jtextarea
1个回答
3
投票

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

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

使用利用Document结构的文本区域方法。就像是:

int line = textArea.getLineOfOffset( textArea.getCaretPosition() );
int start = textArea.getLineStartOffset( line );
int end = textArea.getLineEndOffset( line );
String text = textArea.getDocument().getText(start, end - start);
© www.soinside.com 2019 - 2024. All rights reserved.