Java: JTextPane 中是否有任何方法与 JTextArea 中的append() 执行相同的操作?

发布于 2024-10-12 10:11:37 字数 658 浏览 8 评论 0原文

该程序允许用户在文本字段中输入命令,然后他们输入的任何内容都会显示在文本区域中。如果是诸如 yes 之类的关键字,它将变成绿色,但是我无法在文本区域中仅将一行文本设置为绿色,因此我需要使用文本窗格。

问题是,如果我使用文本窗格,我将无法再使用追加方法。

private final static String newline = "\n";
private void enterPressed(java.awt.event.KeyEvent evt) {                                      
    int key = evt.getKeyCode();
    if (key == KeyEvent.VK_ENTER)
    {
       String textfieldEnterdValue = textfield1.getText().toString();
       this.TextArea1.append("> "+tb1EnterdValue+newline);
       this.tb1.setText("");
       if((tb1EnterdValue.equals("yes")) )
        {
            TextArea1.setForeground(Color.green);
        }
    }

The program lets the user type in a command in a textfield then whatever they typed will show in the text area. If it is keywords such as yes it will turn green, however I cannot set just one line of text green in a text area so I need to use a text pane.

The problem is that if I use a text pane I can't use the append method anymore.

private final static String newline = "\n";
private void enterPressed(java.awt.event.KeyEvent evt) {                                      
    int key = evt.getKeyCode();
    if (key == KeyEvent.VK_ENTER)
    {
       String textfieldEnterdValue = textfield1.getText().toString();
       this.TextArea1.append("> "+tb1EnterdValue+newline);
       this.tb1.setText("");
       if((tb1EnterdValue.equals("yes")) )
        {
            TextArea1.setForeground(Color.green);
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫烠⑼条掵仅有一顆心 2024-10-19 10:11:37

JTextPane 使用 Document 作为模型。这是支持使用多种颜色和字体所必需的。
因此,要附加到 JTextPane,您需要修改文档。
可以使用以下方法:

insertString(int pos, 字符串值, ​​AttributeSet att)
删除( int pos, int length)

例如,这会将 value 附加到文档末尾。

Document d = textPane.getDocument();
d.insertString(d.getLength(), value, null);

此外,您可能需要调用 scrollRectToVisible(Rectangle) 的结果为 modelToView(int) 确保新添加的行显示在屏幕上。

JTextPane uses Document as a model. This is necessary to support the use of multiple colors and fonts.
So, to append to a JTextPane, you need to modify the Document.
The following methods are available :

insertString(int pos, String value, AttributeSet att)
remove(int pos, int length)

For example, this will append value to the end of the document.

Document d = textPane.getDocument();
d.insertString(d.getLength(), value, null);

Additionally, you may want to call scrollRectToVisible(Rectangle) with the result of modelToView(int) to ensure the newly added line is on screen.

ˇ宁静的妩媚 2024-10-19 10:11:37

我认为您需要直接在基础文档上执行此操作。

像这样的东西:

String value = textfield1.getText(); // no need for toString() here!
textPane.getDocument().insertString(textPane.getCaretPosition(), value, null);

I think you'll need to do that directly on the underlying document.

Something like this:

String value = textfield1.getText(); // no need for toString() here!
textPane.getDocument().insertString(textPane.getCaretPosition(), value, null);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文