Java 单击JTextArea时从该区域获取一行

Java 单击JTextArea时从该区域获取一行,java,swing,event-handling,mouseevent,jtextarea,Java,Swing,Event Handling,Mouseevent,Jtextarea,这仅用于学习目的 我有两个JTextArea-s:messagearea和chatarea。messagearea中有一个随机文本,与往常一样,行之间用\n分隔。当单击一行时,我想将该行附加到chatarea。这是我的密码: messagearea.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent me) { if (!messagea

这仅用于学习目的

我有两个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;
                    }
                }
            }
        }
    });
messagearea.addMouseListener(新的MouseAdapter()
{
公共无效mouseClicked(MouseEvent me)
{
如果(!messagearea.getText().trim()等于(“”){
int position=messagearea.viewToModel(messagearea.getMousePosition());
字符串[]text=messagearea.getText().split(“\n”);
int[]charNum=新int[text.length];
for(int i=0;i=位置){
追加(文本[i]+“\n”);
打破
}
}
}
}
});
我想知道,是否有更简单的方法可以做到这一点

非常感谢

我想知道,是否有更简单的方法可以做到这一点

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

使用利用文档结构的文本区域方法。比如:

int line = textArea.getLineOfOffset( textArea.getCaretPosition() );
int start = textArea.getLineStartOffset( line );
int end = textArea.getLineEndOffset( line );
String text = textArea.getDocument().getText(start, end - start);
我想知道,是否有更简单的方法可以做到这一点

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

使用利用文档结构的文本区域方法。比如:

int line = textArea.getLineOfOffset( textArea.getCaretPosition() );
int start = textArea.getLineStartOffset( line );
int end = textArea.getLineEndOffset( line );
String text = textArea.getDocument().getText(start, end - start);
我想知道,是否有更简单的方法可以做到这一点

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

使用利用文档结构的文本区域方法。比如:

int line = textArea.getLineOfOffset( textArea.getCaretPosition() );
int start = textArea.getLineStartOffset( line );
int end = textArea.getLineEndOffset( line );
String text = textArea.getDocument().getText(start, end - start);
我想知道,是否有更简单的方法可以做到这一点

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

使用利用文档结构的文本区域方法。比如:

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

非常感谢。这正是我想知道的!:)很好的回答。。。但是最后一行应该是“String text=…”而不是“int text=…”@JMax,
,但是最后一行应该是…
-已修复。谢谢!这正是我想知道的!:)很好的回答。。。但是最后一行应该是“String text=…”而不是“int text=…”@JMax,
,但是最后一行应该是…
-已修复。谢谢!这正是我想知道的!:)很好的回答。。。但是最后一行应该是“String text=…”而不是“int text=…”@JMax,
,但是最后一行应该是…
-已修复。谢谢!这正是我想知道的!:)很好的回答。。。但是最后一行应该是“String text=…”而不是“int text=…”@JMax,
,但是最后一行应该是…
-固定的。