有没有办法让JTextArea以Java中的某个文本元素为中心?

时间:2018-03-08 00:45:37

标签: java swing jtextarea

对于模糊的标题感到抱歉,如果没有广泛的描述,很难解释我的意思。

我有一个我已经构建的CPU模拟程序,在这个程序的GUI中我有一个JTextArea,其中填充了如下所示的文本字符串

0x01 : $00 (0) [BRK]

这些文本行表示RAM内存中保存的大小为256字节的值。 JTextArea包含256行这些行,每行显示该特定内存地址中的内容。它看起来像这样

0x01 : $00 (0) [BRK]
0x02 : $00 (0) [BRK]
0x03 : $00 (0) [BRK]  <-- PC
0x04 : $00 (0) [BRK]
0x05 : $00 (0) [BRK]
...
0xFF : $00 (0) [BRK]

同时出现的是PC箭头,显示程序计数器的当前位置,因为存储器已逐步通过。随着程序的每一步,PC增加2。因此,如果PC指向0x03,并且程序步进,则PC将增加到0x05。

我的问题是,由于JTextArea的大小,我的JTextArea一次只能显示12个这样的字符串,这意味着经过6个步骤后,PC箭头将从TextArea的底部消失,用户将不得不手动向下滚动再看一遍。

有没有办法让我能够这样做,当PC箭头沿着内存地址列表向下移动时,JTextArea会滚动它,这样PC箭头始终位于TextArea的中心,无论距离多远多少TextArea是吗?

我已尝试使用以下代码来实现此目的,但它似乎并没有造成任何差异。

        int caretVal = 0;
        int pc = 0;

        try
        {
            for(int i = 0; i < steps; i++)
            {
                step();
                pc = mos6502.getCpu().getPc();
            }

            if(pc > 5)
                caretVal = pc + 11;

            gui.refreshGui();
            gui.setMMCaret(caretVal);
        }
        catch(...)
        {
            etc...
        }

我假设这种方法并没有真正做到我认为的那样。但我不太确定。

编辑:另外,我认为这是相关的。在程序的每个步骤之后,调用gui.refreshGui()方法。此方法使JTextAreas更新为新信息,这会导致JTextArea的位置向下拍摄,因为它正在填充新信息。

1 个答案:

答案 0 :(得分:1)

查看Text Utilities。该类包含可以在文本组件上使用的静态方法。

我认为您会对centerLineInScrollPane(...)方法感兴趣。它会尝试将插入符号放在中心位置。

它使用setViewPostion(...)的{​​{1}}方法将包含JViewport的行放在视口的中心。