【问题标题】:Getting a line from JTextArea when clicking on it [duplicate]单击它时从JTextArea获取一行[重复]
【发布时间】:2014-05-25 14:31:14
【问题描述】:

这仅用于学习目的。

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

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】:

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

    这不是一个非常有效的解决方案,因为您每次都在解析整个 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);
    

    【讨论】:

    • 谢谢!这正是我想知道的!:)
    • 很好的答案...但最后一行应该是 'String text=...' 而不是 'int text=...'
    • @JMax, but the last line should be... - 已修复。
    猜你喜欢
    • 2018-07-15
    • 2022-10-26
    • 2012-04-17
    • 2011-09-08
    • 2021-05-01
    • 2014-01-21
    • 2023-03-24
    • 2012-03-14
    • 2019-02-14
    相关资源
    最近更新 更多