JTextAreaに行番号を追加しようとしていますが、いくつかの問題があります。行番号は表示されますが、正しくスクロールしません。Java JTextArea行番号
私は、データ行(ログメッセージ)とそれに関連付けられた行番号を格納するカスタムクラスのリンクリストと、テキスト領域に表示するかどうかの可視性を持っています。だから、私がやったことは、2つのJTextAreasを作成することでした.1つはログを格納し、もう1つは行番号を格納することです。
レイアウトが機能し、行番号がログに正しく入力されます。問題は、上下にスクロールしようとするときです。スクロールするとログが適切に調整されますが、行番号は正しく表示されません。当初表示されていた最初の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) { ... }
}
任意のアイデア?
ありがとう、
スクロールペインに複数のビューポートがある可能性はありますか? scrollPaneビューポートに 'scrollPane.getViewport()。add(lineField);'を追加して 'lineField'を追加しようとしましたが、ウィンドウからすべてのテキスト領域が削除されました。それらを作成するいくつかの種類のエラーがあるように見えます。 – linsek
ああ、私はあなたのコメントを誤解しました。私はそれらを今パネルに入れて、それがどのように進むのかを教えてくれます。 – linsek
それは動作します。私は境界線とインセンティブの面でそれを少しきれいにする必要がありますが、スクロールバーが機能し、行番号が正しく設定されます。ありがとう! – linsek