mi pregunta es cómo establecer la dinámica, el número de filas y columnas en un JTable? Me refiero a que si el usuario desea crear una tabla de 2 filas y 2 columnas, simplemente escriba el número. ¿Cómo puedo hacer eso, yo lo he probado con el DefaultModel sin éxito.

Agradezco cualquier ayuda.

Gracias

  • Qué significa un ‘irregulares’ de la tabla? Como el usuario se permite una fila que tiene 3 columnas y otra fila con 4 columnas? O simplemente estás teniendo problemas para agregar filas a la tabla?
  • Publicar el código que has probado.
  • TableModel es la solución…
  • Tengo problemas añadir las filas, voy a tratar de una cosa, y si no funciona voy a publicar el código, gracias chicos por su rápida respuesta
InformationsquelleAutor Lalo Galicia | 2014-11-17

1 Comentario

  1. 5

    DefaultTableModel tiene dos medios por los cuales se puede definir el número de filas/columnas en tiempo de ejecución.

    Usted podría…

    Simplemente crear un nuevo DefaultTableModel, pasando a las filas y columnas que desea…

    DefaultTableModel model = new DefaultTableModel(rows, cols);

    y, a continuación, aplicar esto a la JTable. Esto, obviamente, sustituir el actual modelo de mesa, lo que significa que usted perderá todos sus datos.

    Usted podría…

    Crear un master DefaultTableModel y aplicarlo a la JTable y simplemente utilizar

    model.setRowCount(rows);
    model.setColumnCount(cols);

    para actualizar dinámicamente el número de filas y columnas como sea necesario. Esto le permitirá conservar los datos dentro de la tabla (modelo de esperar al eliminar filas o columnas, entonces se pierde)

    Ejecutables ejemplo

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSpinner;
    import javax.swing.JTable;
    import javax.swing.SpinnerNumberModel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.table.DefaultTableModel;
    public class Test {
    public static void main(String[] args) {
    new Test();
    }
    public Test() {
    EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
    ex.printStackTrace();
    }
    JFrame frame = new JFrame("Testing");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(new TestPane());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    });
    }
    public class TestPane extends JPanel {
    private JTable table;
    private DefaultTableModel model;
    private JSpinner fldRows;
    private JSpinner fldColumns;
    public TestPane() {
    setLayout(new BorderLayout());
    fldRows = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1));
    fldColumns = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1));
    JPanel options = new JPanel(new GridBagLayout());
    options.add(new JLabel("Rows: "));
    options.add(fldRows);
    options.add(new JLabel("Columns: "));
    options.add(fldColumns);
    JButton update = new JButton("Update");
    options.add(update);
    update.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    int rows = (int) fldRows.getValue();
    int cols = (int) fldColumns.getValue();
    //Dynamic master model...
    //                 model.setRowCount(rows);
    //                 model.setColumnCount(cols);
    //Replace model
    table.setModel(new DefaultTableModel(rows, cols));
    }
    });
    model = new DefaultTableModel();
    table = new JTable();
    add(new JScrollPane(table));
    add(options, BorderLayout.NORTH);
    }
    }
    }

    Para obtener más detalles, consulte…

Dejar respuesta

Please enter your comment!
Please enter your name here