2013-03-17 55 views
1

我在JScrollPane内部有JTable,而且我正在努力解决这个问题,即当水平滚动时,JTable不适合JScrollPane。我在JTable中有18行,但当水平滚动时只显示16行。这里是我的意思Java:当水平滚动时,JTable列不适合JScrollPane

http://imgur.com/BfD7sKA (Sorry cannot post images, 10 reputation required :P)

因此,大家可以看到从图片还挺行的列运行和最后2行缺少。

我还没有以编程方式编码任何东西,一切都已使用Netbeans IDE设计生成器完成。

P.S.有趣的是,如果我扩展我的程序或全屏显示,程序会显示必须在那里的所有列。但是如果我再次缩小程序并尝试使用水平滚动,那会发生什么情况。

如果我错过了任何东西(对不起,第一次发布在这里)只是问。谢谢您的帮助!

因此,这里是从NetBeans关于主UI窗口

package View; 

import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import base.*; 
import java.awt.Dimension; 

/** 
* 
* @author Nikki 
*/ 
public class V_main extends javax.swing.JFrame { 

    /** 
    * Creates new form V_main 
    */ 
    public V_main() { 
     initComponents(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     Dimension d = account_table.getPreferredSize(); 
      jScrollPane1.setPreferredSize(
     new Dimension(d.width,account_table.getRowHeight()*18+1)); 
    } 

    /** 
    * 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() { 

     picture_label = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 
     jButton3 = new javax.swing.JButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     account_table = new javax.swing.JTable(); 
     exit_button = new javax.swing.JButton(); 
     jButton4 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("BASe (Basic Accounting System)"); 

     picture_label.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/fazer_logo.png"))); // NOI18N 

     jButton1.setText("Add New Customer"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     jButton2.setText("Remove Customer"); 

     jButton3.setText("Edit Customer Information"); 

     jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     jScrollPane1.setAutoscrolls(true); 
     jScrollPane1.setPreferredSize(new java.awt.Dimension(1500, 1000)); 

     account_table.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {"Nikki", "Kononov", null, "", "", "none", "[email protected]", null, "none", null, null, null, null, null, null, null}, 
       {"Nikki", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {"Nikki", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, 
       {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null} 
      }, 
      new String [] { 
       "Company", "Person", "Title ", "Street Address", "Zip Code", "City", "Area", "Country", "Website", "Email", "Telephone", "Fax", "Mobile", "Employees", "Turnover", "Result" 
      } 
     ) { 
      Class[] types = new Class [] { 
       java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class 
      }; 

      public Class getColumnClass(int columnIndex) { 
       return types [columnIndex]; 
      } 
     }); 
     account_table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); 
     account_table.setCellSelectionEnabled(true); 
     account_table.setFillsViewportHeight(true); 
     account_table.setPreferredSize(new java.awt.Dimension(1300, 1000)); 
     jScrollPane1.setViewportView(account_table); 
     account_table.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); 

     exit_button.setText("Exit"); 
     exit_button.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       exit_buttonActionPerformed(evt); 
      } 
     }); 

     jButton4.setText("Search for Customers"); 

     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.DEFAULT_SIZE, 938, Short.MAX_VALUE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createSequentialGroup() 
          .addGap(27, 27, 27) 
          .addComponent(picture_label)) 
         .addGroup(layout.createSequentialGroup() 
          .addGap(18, 18, 18) 
          .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
          .addComponent(jButton3))) 
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(exit_button, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
          .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE) 
          .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(picture_label) 
         .addGap(13, 13, 13) 
         .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(18, 18, 18) 
         .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(18, 18, 18) 
         .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(18, 18, 18) 
         .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(exit_button, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 533, Short.MAX_VALUE))) 
       .addContainerGap()) 
     ); 

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

    private void exit_buttonActionPerformed(java.awt.event.ActionEvent evt) {            
     super.dispose(); 
    }           

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     BASe.showAdd(); 
    }           

    /** 
    * @param args the command line arguments 
    */ 
    // Variables declaration - do not modify      
    private javax.swing.JTable account_table; 
    private javax.swing.JButton exit_button; 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JButton jButton3; 
    private javax.swing.JButton jButton4; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JLabel picture_label; 
    // End of variables declaration     
} 
+0

为了更快得到更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2013-03-17 10:51:11

+0

__everything已经完成使用Netbeans IDE设计builder__恕我直言这不是一个好的学习方式。请学会自己编写代码,而不是使用UI构建器。 – Amarnath 2013-03-17 10:59:21

+0

不要使用setXXSize,因为某些原因[请参阅最近的QA](http://stackoverflow.com/a/7229519/203657)。在这种特殊情况下,它似乎混淆了滚动:在表格和其封闭的scrollPane上具有不同的,不兼容的大小,标题与表本身的滚动方式不同 – kleopatra 2013-03-17 15:08:23

回答

1

代码你要么可以滚动或有所有柱配合(挤压如果有很多),可见没有滚动条。 该行为由autoResizeMode属性控制。要显示滚动条:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

要显示所有列,每列获得超额宽度相同的大写金额:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 

后者是默认的(模NetBeans的干扰,不知道任何有关那部分)。

编辑

在这个特定背景下的错误似乎被调用表和它的不兼容的封装尺寸滚动面板都了setPreferredSize。当实际大小大于表格的硬编码前缀时,结果是未确定的行为。

底线:为什么你shouldn't use setXXSize在组件上的另一个原因,永远。这里的出路是实现表格的getPreferredScrollableViewportSize(它是Scrollable角色的一部分),以便根据列/行大小返回合理的值。

+0

问题是,我有太多列,我希望它们不会被挤压。我注意到的事情是,如果我将表格的宽度延长超过1300,那么它会开始变得怪异,正如我上面所示。但是如果我把它做得更小,那么它就适合ScrollPane。那么可能是因为scrollpane的大小不够大? – 2013-03-17 13:04:33

+0

听起来像你没有显示的代码有问题:-)请编辑你的问题并发布一个SSCCE来演示你正在描述的行为 – kleopatra 2013-03-17 13:06:37

+0

我将马上编辑消息。 – 2013-03-17 13:12:18