/**
   * Constructor de la clase, crea la tabla y de da todas las propiedades para mostrarla en la
   * aplicacion.
   */
  public PanelHojaCalculo() {
    modelo = new ModeloTabla();
    columnasTabla = new ModeloColumnasTabla();
    tabla = new JTable(modelo, columnasTabla);
    tablaAux = new JTable(modelo, filasTabla);

    tabla.createDefaultColumnsFromModel();
    tablaAux.createDefaultColumnsFromModel();

    tabla.setColumnSelectionAllowed(true);
    tabla.setRowSelectionAllowed(true);

    tablaAux.setSelectionModel(tabla.getSelectionModel());
    tablaAux.setMaximumSize(new Dimension(40, 10000));
    tablaAux.setBackground(new Color(238, 238, 238));
    // Se puede pasar a true si se quiere seleccionar las filas
    tablaAux.setEnabled(false);
    tablaAux.setColumnSelectionAllowed(false);
    tablaAux.setCellSelectionEnabled(false);

    viewPort = new JViewport();
    viewPort.setView(tablaAux);
    viewPort.setPreferredSize(tablaAux.getMaximumSize());

    tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    tablaAux.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    scrollPane = new JScrollPane(tabla);
    scrollPane.setRowHeader(viewPort);
    scrollPane.setPreferredSize(new Dimension(790, 500));
    add(scrollPane);
  }
  public FixedColumnExample() {
    super("Fixed Column Example");
    setSize(400, 150);
    data =
        new Object[][] {
          {"1", "11", "A", "", "", "", "", ""},
          {"2", "22", "", "B", "", "", "", ""},
          {"3", "33", "", "", "C", "", "", ""},
          {"4", "44", "", "", "", "D", "", ""},
          {"5", "55", "", "", "", "", "E", ""},
          {"6", "66", "", "", "", "", "", "F"}
        };
    column = new Object[] {"fixed 1", "fixed 2", "a", "b", "c", "d", "e", "f"};
    AbstractTableModel fixedModel =
        new AbstractTableModel() {
          public int getColumnCount() {
            return 2;
          }

          public int getRowCount() {
            return data.length;
          }

          public String getColumnName(int col) {
            return (String) column[col];
          }

          public Object getValueAt(int row, int col) {
            return data[row][col];
          }
        };
    AbstractTableModel model =
        new AbstractTableModel() {
          public int getColumnCount() {
            return column.length - 2;
          }

          public int getRowCount() {
            return data.length;
          }

          public String getColumnName(int col) {
            return (String) column[col + 2];
          }

          public Object getValueAt(int row, int col) {
            return data[row][col + 2];
          }

          public void setValueAt(Object obj, int row, int col) {
            data[row][col + 2] = obj;
          }

          public boolean CellEditable(int row, int col) {
            return true;
          }
        };
    fixedTable =
        new JTable(fixedModel) {
          public void valueChanged(ListSelectionEvent e) {
            super.valueChanged(e);
            checkSelection(true);
          }
        };
    table =
        new JTable(model) {
          public void valueChanged(ListSelectionEvent e) {
            super.valueChanged(e);
            checkSelection(false);
          }
        };
    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane scroll = new JScrollPane(table);
    JViewport viewport = new JViewport();
    viewport.setView(fixedTable);
    viewport.setPreferredSize(fixedTable.getPreferredSize());
    scroll.setRowHeaderView(viewport);
    scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable.getTableHeader());
    getContentPane().add(scroll, BorderLayout.CENTER);
  }