对于模糊的标题感到抱歉,如果没有广泛的描述,很难解释我的意思。
我有一个我已经构建的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的位置向下拍摄,因为它正在填充新信息。
答案 0 :(得分:1)
查看Text Utilities。该类包含可以在文本组件上使用的静态方法。
我认为您会对centerLineInScrollPane(...)
方法感兴趣。它会尝试将插入符号放在中心位置。
它使用setViewPostion(...)
的{{1}}方法将包含JViewport
的行放在视口的中心。