es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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();
    }
}
Tags:  , , , ,

Answer

  1. Avatar for 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 el JList. En su lugar, puedes permitir que el JList ajuste automáticamente el tamaño de cada celda en función del contenido utilizando mainList.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.

Comments are closed.