Números de Java JTextArea Line
-
30-09-2019 - |
Pregunta
Estoy tratando de añadir números de línea a un JTextArea y estoy teniendo algunas dificultades. Los números de línea aparecen, pero no se desplazan correctamente.
Tengo una lista vinculada de una clase personalizada que almacena una línea de datos (mensaje de registro) y un número de línea asociado a él, así como la visibilidad de si se debe mostrar en el área de texto o no. Así que lo que hice fue crear dos JTextAreas ... uno para almacenar los registros, y el otro para almacenar los números de línea.
El diseño funciona y los números de línea rellenar correctamente con los registros. El problema es cuando intento para desplazarse hacia arriba o hacia abajo. Los registros se ajustan adecuadamente mientras se desplaza, pero los números de línea no lo hacen. no muestra nada más allá de los números 28 de línea iniciales que se muestran inicialmente. El espacio es sólo en blanco.
Mi código es el siguiente:
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) { ... }
}
¿Alguna idea?
Gracias,
Solución
¿Usted ha intentado poner los dos campos de texto en la ventana? Tal vez en un panel que da a los números de línea una fracción de la anchura disponible?
Otros consejos
El compenent utilizado para mostrar los números de línea se puede añadir usando:
scrollPane.setRowHeaderView(...);
Otra opción es utilizar un JTable para mostrar ambas columnas. El uso de dos áreas de texto no es realmente la mejor solución.