我试图将行号添加到JTextArea并遇到一些困难。行号出现,但是它们不能正确滚动。
我有一个自定义类的链接列表,该类存储一行数据(日志消息)和与之关联的行号,以及是否应在文本区域中显示它的可见性。因此,我要做的是创建两个JTextAreas ...一个用于存储日志,另一个用于存储行号。
布局有效,并且行号已正确填充日志。问题是当我尝试向上或向下滚动时。滚动时日志会正确调整,但行号却不会。除了最初显示的最初28行编号之外,没有任何显示。该空间只是空白。
我的代码如下:
public class CustomLineNumbers extends JFrame implements ActionListener
{
...
private JTextArea logField;
private JTextArea lineField;
private List<Log> logs;
public CustomLineNumbers()
{
...
logs = new ArrayList<Log>();
logField = new JTextArea(28, 68);
logField.setMargin(new Insets(0, 5, 0, 0));
logField.setEditable(false);
logField.setLineWrap(true);
logField.setWrapStyleWord(true);
lineField = new JTextArea();
lineField.setPreferredSize(new Dimension(25, 0));
lineField.setBackground(this.getForeground());
lineField.setBorder(OUTER);
lineField.setEditable(false);
initLogs();
updateLogView();
updateLineView();
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().add(logField);
scrollPane.setRowHeaderView(lineField);
scrollPane.setVertical...Policy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
...
}
private void initLogs()
{
// inits the data in the list
}
public void updateLogView()
{
logField.setText(""); // reset log field to nothing
for (int i = 0; i < logs.size(); i++)
{
// Append only if the line is visible
if (logs.get(i).getVisibility())
{
// if this isn't the first line,
// add a line break before appending
if (i > 0)
logField.append("\n");
logField.append(logs.get(i).getLine());
}
}
}
public void updateLineView()
{
lineField.setText(""); // reset log field to nothing
for (int i = 0; i < logs.size(); i++)
{
// Append only if the line is visible
if (logs.get(i).getVisibility())
{
// if this isn't the first line,
// add a line break before appending
if (i > 0)
lineField.append("\n");
lineField.append("" + logs.get(i).getLineNumber());
}
}
}
...
/***** Main Execution *****/
public static void main(String[] args) { ... }
}
有任何想法吗?
谢谢,
最佳答案
您是否尝试过将两个文本字段都放在viewPort中?也许在面板上,使行号为可用宽度的一小部分?
关于java - Java JTextArea行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618136/