2016-03-22 21 views
0

Veritabanımdan, yaklaşık 18000 satırdan biraz bilgi görüntüleyen bir JTable oluşturduğunda kaybolur. Dikey kaydırma çubuğu dışında her şey tabloda iyi görüntülenir. Sadece masa yüksek nüfuslu olduğunda ortadan kayboluyor. Yaklaşık 500 satırlık bir başka JTable'ım var ve problem JTable'ın yüksekliğini arttırarak çözülüyor, ancak 1) bu çözüm değil ve 2) en büyük JTable için çalışmıyor.JTable kaydırma çubuğu çok sayıda satır

Soruma şudur: kaydırma çubuğunu orada olmaya zorlamanın bir yolu var mı?

JScrollPane dikey kaydırma çubuğu ilkesini DAİMA olarak ayarlamayı denedim, ancak çalışmıyor.

import javax.swing.table.DefaultTableModel; 

/** 
* 
* 
*/ 
public class NewJFrame extends javax.swing.JFrame { 

    /** 
    * Creates new form NewJFrame 
    */ 
    public NewJFrame() { 
     initComponents(); 

     final DefaultTableModel tabla = (DefaultTableModel) jTable1.getModel(); 

     //Adds 1000 rows for testing the error 
     for(int i = 0; i < 1000; i++){ 



      tabla.addRow(new Object[]{""+i}); 

     } 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null} 
      }, 
      new String [] { 
       "Title 1" 
      } 
     ) { 
      Class[] types = new Class [] { 
       java.lang.String.class 
      }; 

      @Override 
      public Class getColumnClass(int columnIndex) { 
       return types [columnIndex]; 
      } 
     }); 
     jScrollPane1.setViewportView(jTable1); 

     final javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(13, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 

     pack(); 
    }// </editor-fold>       

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (final javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (final ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (final InstantiationException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (final IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (final javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new NewJFrame().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTable jTable1; 
    // End of variables declaration     
} 

yardımcı Umut: Burada

SSCCE olduğunu!

+2

Eğer kod bazı gösterebilir:

F sorunu çözüldü Nimbus L & ayarladıktan sonra bu kodu koyarak? –

+1

Farkın 500 ile 18000 satır arasında değil, iki JTable'nız arasındaki başka bir farklılıktan şüpheleniyorum. 500 ve diğeriyse 18000 satır koyarsanız ne olur? –

+0

@SKunda 'jTable1.setAutoResizeMode (JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS)' gibi bir şey denedim; Diğer benzer soruları gördüm ama bu – ri0s425

cevap

0

Derin aramadan sonra, sorunumu açıklayan bir question buldum. Eğer ne denedim

LookAndFeel lookAndFeel = UIManager.getLookAndFeel(); 
UIDefaults defaults = lookAndFeel.getDefaults(); 
defaults.put("ScrollBar.minimumThumbSize", new Dimension(30, 30)); 
İlgili konular