2016-03-22 13 views
0

Ich baue eine JTable, die einige kleine Informationen aus meiner Datenbank anzeigt, etwa 18000 Zeilen. Bis auf die vertikale Bildlaufleiste wird alles gut in der Tabelle angezeigt. Es verschwindet nur, wenn der Tisch hoch gefüllt ist. Ich habe eine andere JTable mit etwa 500 Zeilen und ich das Problem wird gelöst, die Höhe der JTable erhöht, aber 1) das ist nicht die Lösung und 2) funktioniert nicht für die größte JTable.JTable Bildlaufleiste verschwindet, wenn hohe Anzahl von Zeilen

Meine Frage ist: Gibt es eine Möglichkeit, die Bildlaufleiste zu zwingen, dort zu sein?

Ich habe versucht, die vertikale Scrollbar JScrollPane Richtlinie auf IMMER, aber es funktioniert nicht. Hier

ist die SSCCE:

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     
} 

Hoffe, Sie können helfen!

+2

Können Sie einige der Code zeigen, was Sie versucht haben? –

+1

Ich vermute, der Unterschied liegt nicht zwischen 500 und 18000 Zeilen, sondern ein anderer Unterschied zwischen Ihren beiden JTables. Was passiert, wenn Sie 18000 Reihen in die mit 500 und umgekehrt setzen? –

+0

@SKunda Ich habe versucht, etwas wie 'jTable1.setAutoResizeMode (JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);' Ich habe auf anderen ähnlichen Fragen gesehen, aber das hilft nicht – ri0s425

Antwort

0

Nach tiefer Suche fand ich eine question, die mein Problem erklärte.

Setzen Sie diesen Code nach der Nimbus L Einstellung & F löste das Problem:

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