Cuando estoy actualizando los elementos de JList, se muestran de una forma extraña.
Cuando agrego elementos a la lista de modelos, se muestran de manera extraña en el JList y no sé por qué. Son muy pequeños y también se superponen. Cuando establezco previamente una lista, se muestra normal como si estuviera configurada desde el setFixedCell, ¿podrías darme una pista?
import javax.swing.*;
public class test {
static JFrame mainFrame;
static JPanel mainPanel;
static JButton mainSwitch;
static JList mainList;
static long firstTime = 0;
static long times1;
static int i = 0;
static boolean x = false;
static DefaultListModel model = new DefaultListModel();
// Cosas de la interfaz
test() {
mainFrame = new JFrame("Zeiterfassung");
mainPanel = new JPanel();
mainSwitch = new JButton("ON");
mainList = new JList(model);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(420, 420);
mainPanel.setSize(10, 10);
mainPanel.setLayout(null);
mainList.setBounds(12, 10, 380, 300);
mainList.setFixedCellHeight(30);
mainList.setFixedCellWidth(30);
mainSwitch.setBounds(12, 320, 380, 50);
mainSwitch.addActionListener(e -> messureTime());
mainPanel.add(mainSwitch);
mainPanel.add(mainList);
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
// Método detrás del botón, booleano normal que cambia el texto del botón "startTracking"
public static void messureTime() {
if (x == false) {
firstTime = System.currentTimeMillis();
mainSwitch.setText("Stop");
x = true;
} else if (x == true) {
times1 = (System.currentTimeMillis() - firstTime) / 1000;
model.addElement(String.valueOf(times1) + "Seconds");
mainSwitch.setText("Start");
x = false;
mainList.setFixedCellHeight(5);
i++;
mainList.setModel(model);
}
}
public static void main(String[] args) {
test zeiterfassung = new test();
}
}
davy.ai
En tu código, has establecido la altura y la anchura fija de las celdas de
JList
en 30. Sin embargo, estás agregando elementos de diferentes tamaños a la lista dinámicamente. Esto provoca que los elementos se superpongan ya que no caben dentro del tamaño fijo de la celda.Para solucionar este problema, debes eliminar la línea
mainList.setFixedCellHeight(30);
ya que restringe el tamaño de cada celda en elJList
. En su lugar, puedes permitir que elJList
ajuste automáticamente el tamaño de cada celda en función del contenido utilizandomainList.setPrototypeCellValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
antes de agregar cualquier elemento a la lista. La cadena que pases a este método debe ser lo suficientemente larga como para acomodar el elemento más grande que esperas agregar a la lista.Con estos cambios, las celdas en el
JList
deberían ajustar su tamaño según el contenido y los elementos deberían mostrarse correctamente sin superposiciones.