Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Jtable y JScrollPane

Estas en el tema de Jtable y JScrollPane en el foro de Java en Foros del Web. Hola gente, les traigo una duda puntual que no logro encontrar como resolverlo. tengo un jframe que contiene un Scroll horizontal y vertical, el cual ...
  #1 (permalink)  
Antiguo 17/02/2016, 19:01
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 13 años, 6 meses
Puntos: 5
Jtable y JScrollPane

Hola gente, les traigo una duda puntual que no logro encontrar como resolverlo.
tengo un jframe que contiene un Scroll horizontal y vertical, el cual contiene un JTABLE.
bueno resulta que la tabla es grande tanto horizontalmente como verticalmente.
en lo vertical no tengo problemas.

lo que no se como hacer es para que me quede el scroll horizontal como quiero.
lo que quiero es que el el scroll entre en el frame, pero pueda moverlo horizontalmente porque las columnas son muchas y casi todas con string.

paso fragmento de codigo a ver si a alguien se le ocurre algo.

Código Codigo java:
Ver original
  1. public class ViajesGrilla extends JFrame implements InterfacePanel, InterfacePopupGrilla{
  2.     private JTable tabla;
  3.     private DefaultTableModel model;
  4.     private JScrollPane scrollTabla;
  5.     private DefaultTableCellRenderer alinearCentro, alinearDerecha, alinearIzquierda;
  6.     private TableRowSorter<TableModel> modeloOrdenado;
  7.     private JTextField tfFiltro;
  8.     private JPopupMenu popupMenu;
  9.     private JMenuItem mopEditar, mopAmpliar, mopOpciones;
  10.     private JButton btnAceptar, btnCancelar;
  11.    
  12.     private PantallaPrincipal pp;
  13.    
  14.    
  15.     /**
  16.      * Create the panel.
  17.      */
  18.     public ViajesGrilla(int id, PantallaPrincipal pp)  {
  19.         setTitle("Viajes Grilla");
  20.         this.pp = pp;
  21.        
  22.         int x = 10;
  23.         int y = 10;
  24.         int z = 300;
  25.         this.initAlinear();
  26.        
  27.         getContentPane().setLayout(null);
  28.        
  29.         scrollTabla = new JScrollPane();
  30.         scrollTabla.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  31.         scrollTabla.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
  32.         scrollTabla.setBounds(x, y, 3*Win.getAnchoPanel(x+25), Win.getAltoPanel(100));
  33.         setBounds(0, 0, Win.getAncho(), Win.getAlto());
  34.         getContentPane().add(scrollTabla);
  35.        
  36.         tabla = new JTable();
  37.         this.init();
  38.         scrollTabla.setViewportView(tabla);
  39.        
  40.         popupMenu = new JPopupMenu();
  41.         addPopup(tabla, popupMenu);
  42.        
  43.         mopAmpliar = new JMenuItem("Ampliar");
  44.         mopAmpliar.addActionListener(new ActionListener() {
  45.             public void actionPerformed(ActionEvent e) {
  46.                 System.out.println("ampliar");
  47.                 Ampliar();
  48.             }
  49.         });
  50.         mopAmpliar.setIcon(new ImageIcon(ViajesGrilla.class.getResource("/VIEW/images/Zoom16.gif")));
  51.         popupMenu.add(mopAmpliar);
  52.        
  53.         mopOpciones = new JMenuItem("Opciones");
  54.         mopOpciones.addActionListener(new ActionListener() {
  55.             public void actionPerformed(ActionEvent e) {
  56.                 System.out.println("opciones");
  57.                 Opciones();
  58.             }
  59.         });
  60.         mopOpciones.setIcon(new ImageIcon(ViajesGrilla.class.getResource("/VIEW/images/Process16.gif")));
  61.         popupMenu.add(mopOpciones);
  62.        
  63.         mopEditar = new JMenuItem("Editar");
  64.         mopEditar.addActionListener(new ActionListener() {
  65.             public void actionPerformed(ActionEvent arg0) {
  66.                 System.out.println("Editar");
  67.                 Editar();
  68.             }
  69.         });
  70.         mopEditar.setIcon(new ImageIcon(ViajesGrilla.class.getResource("/VIEW/images/Edit16.gif")));
  71.         popupMenu.add(mopEditar);
  72.        
  73.         tfFiltro = new JTextField();
  74.         tfFiltro.setBounds(x, Win.getAltoPanel(80), 100, 25);
  75.         getContentPane().add(tfFiltro);
  76.         tfFiltro.setColumns(10);
  77.        
  78.         btnAceptar = new JButton("Aceptar");
  79.         btnAceptar.addActionListener(new ActionListener() {
  80.             public void actionPerformed(ActionEvent e) {
  81.                 salir();
  82.             }
  83.         });
  84.         btnAceptar.setBounds(120, 650, 90, 25);
  85.         getContentPane().add(btnAceptar);
  86.        
  87.         btnCancelar = new JButton("Cancelar");
  88.         btnCancelar.addActionListener(new ActionListener() {
  89.             public void actionPerformed(ActionEvent arg0) {
  90.                
  91.             }
  92.         });
  93.         btnCancelar.setBounds(220, 650, 90, 25);
  94.         getContentPane().add(btnCancelar);
  95.        
  96.         this.autoFiltro();
  97.         this.setVisible(true);
  98.     }
  99.    
  100.     public void init(){
  101.         model = new DefaultTableModel(
  102.                         new Object[][] {
  103.                             {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
  104.                             {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
  105.                             {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},                
  106.                         },
  107.                         new String[] { //23 col
  108.                             "ID", "Nro.Orden1", "Fecha", "Empleador", "Equipo", "Desde", "Hasta", "Entidad", "Pendiente",
  109.                             "Nro.Orden2", "Fecha 2do Viaje", "Cereal", "Tn1", "Tarifa 1", "Tn2", "Tarifa 2", "Total",
  110.                             "Comisión", "% Com.", "IVA21%", "FINAL", "Obs.", "PAGO"
  111.                         }
  112.                     ) {
  113.                         Class[] columnTypes = new Class[] {
  114.                        
  115.                             Float.class, Integer.class, Float.class, Float.class, String.class, String.class
  116.                         };
  117.                         public Class getColumnClass(int columnIndex) {
  118.                             return columnTypes[columnIndex];
  119.                         }
  120.                     };
  121.         /** alinear titulos de tabla **/       
  122.         ((DefaultTableCellRenderer)tabla.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
  123.         tabla.setModel(model);
  124.         tabla.getColumnModel().getColumn(0).setMaxWidth(100);
  125.         tabla.getColumnModel().getColumn(1).setMaxWidth(100);
  126.         tabla.getColumnModel().getColumn(2).setPreferredWidth(100);
  127.         tabla.getColumnModel().getColumn(2).setMaxWidth(150);
  128.         tabla.getColumnModel().getColumn(3).setPreferredWidth(100);
  129.         tabla.getColumnModel().getColumn(3).setMaxWidth(200);
  130.         tabla.getColumnModel().getColumn(4).setMaxWidth(200);
  131.         tabla.getColumnModel().getColumn(5).setMaxWidth(250);
  132.         tabla.getColumnModel().getColumn(6).setMaxWidth(250);
  133.         tabla.getColumnModel().getColumn(7).setMaxWidth(300);
  134.         tabla.getColumnModel().getColumn(8).setMaxWidth(100);
  135.         tabla.getColumnModel().getColumn(9).setMaxWidth(100);
  136.         tabla.getColumnModel().getColumn(10).setMaxWidth(150);
  137.         tabla.getColumnModel().getColumn(11).setMaxWidth(200);
  138.         tabla.getColumnModel().getColumn(12).setMaxWidth(200);
  139.         tabla.getColumnModel().getColumn(13).setMaxWidth(200);
  140.         tabla.getColumnModel().getColumn(14).setMaxWidth(200);
  141.         tabla.getColumnModel().getColumn(15).setMaxWidth(200);
  142.         tabla.getColumnModel().getColumn(16).setMaxWidth(250);
  143.         tabla.getColumnModel().getColumn(17).setMaxWidth(200);
  144.         tabla.getColumnModel().getColumn(18).setMaxWidth(100);
  145.         tabla.getColumnModel().getColumn(19).setMaxWidth(100);
  146.         tabla.getColumnModel().getColumn(20).setMaxWidth(200);
  147.         tabla.getColumnModel().getColumn(21).setMaxWidth(400);
  148.         tabla.getColumnModel().getColumn(22).setMaxWidth(200);
  149.        
  150.        
  151.         DAOEquipos de = new DAOEquipos();
  152.         DAOPersona dp = new DAOPersona();
  153.         DAOViajes dv = new DAOViajes();
  154.        
  155.         List<Object> list = dv.list();
  156.         Viaje o;
  157.         Persona empleador;
  158.         Equipo equipo;
  159.        
  160.         if(list.size()>0){
  161.             model.setRowCount(0);
  162.            
  163.             for (Iterator<Object>i = list.iterator(); i.hasNext(); ) {
  164.                 o = (Viaje)i.next();
  165.                 empleador = (Persona)dp.getById(o.getId_empleador());
  166.                 equipo = (Equipo)de.getById(o.getId_equipo());
  167.                                
  168.                 model.addRow(new Object[]
  169.                        
  170. //  "ID", "Nro.Orden1", "Fecha", "Empleador", "Equipo", "Desde", "Hasta", "Entidad", "Pendiente",
  171. //// "Nro.Orden2","Fecha 2do Viaje","Cereal", "Tn1", "Tarifa 1", "Tn2", "Tarifa 2", "Total",
  172. ////"Comisión", "% Com.", "IVA21%", "FINAL", "Obs.", "PAGO"
  173.                          {o.getId(),
  174.                           o.getNroOrden1(),
  175.                           Util.getDate2(o.getFecha1()),
  176.                           empleador.getApellido()+", "+empleador.getNombre(),
  177.                           equipo.getChasis()+"-"+equipo.getAcoplado(),
  178.                           o.getDesde(),
  179.                           o.getHasta(),
  180.                           o.getEntidad(),
  181.                           o.getPendiente(),
  182.                           o.getNroOrden2(),
  183.                           Util.getDate2(o.getFecha2()),
  184.                           o.getCereal(),
  185.                           o.getTn1(),
  186.                           o.getTarifaArrime(),
  187.                           o.getTn2(),
  188.                           o.getTarifaPuerto(),
  189.                           o.getTotal(),
  190.                           o.getComisionValor(),
  191.                           o.getComision(),
  192.                           o.getIVA(),
  193.                           o.getTotalFinal(),
  194.                           o.getObs(),
  195.                           o.getPago()
  196.                          
  197.                          });
  198.                
  199.                 }//fin FOR
  200.         } //fin IF TRUE        
  201.     } //fin INITTABLA

este es el codigo que crea el frame con sus contenidos, metodo que crea y carga el jtable.
lo que quiero es que el el jtable aparezca en el frame, y por un scroll horizontal poder ir hasta el costado derecho final de la tabla, ya que son muchas columnas.
Espero ser claro y no enredar las cosas.
Cualquier sugerencia, sera agradecida.
Saludos.

Última edición por lucho248; 18/02/2016 a las 05:07
  #2 (permalink)  
Antiguo 03/03/2016, 05:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 13 años, 6 meses
Puntos: 5
Respuesta: Jtable y JScrollPane

Buenos días, pude solucionar el problema agregando este codigo en las lineas de la 29 a la 40:

Código Java:
Ver original
  1. tabla = new JTable();
  2.         this.init();
  3. /************************/
  4. tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  5. tabla.doLayout();
  6. /***********************/
  7.         scrollTabla = new JScrollPane(tabla);
  8.         scrollTabla.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  9.         scrollTabla.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
  10.         scrollTabla.setBounds(x, y, Win.getAnchoPanel(x+25), Win.getAltoPanel(100));
  11.         setBounds(0, 0, Win.getAncho(), Win.getAlto());
  12.         getContentPane().add(scrollTabla);

la barra horizontal no aparece en un primer momento porque la tabla tiene habilitada la opcion de autoresize. Deshabilitando esta opcion, aparecera sin problemas la barra horizontal.
Abrazo.

Etiquetas: jscrollpane, jtable, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:24.