2017-02-24 146 views
0

我写了一个简单的程序来创建一个空的JTable。但是,当我显示表格时,表格下方会出现一个额外的空白区域。现在,我想删除表格下方的空白区域。如何从JTable底部删除多余的空白空间?

JTable的计划:

public class Table extends JFrame { 

Table() 
{ 
     int numColoumns=5; 
     int numRows=10 ; 
     String[] colHeadings = {"COLUMN1","COLUMN2","COLUMN3","COLUMN4","COLUMN5"}; 

     DefaultTableModel model = new DefaultTableModel(numRows, numColoumns) ; 
     model.setColumnIdentifiers(colHeadings); 

     JTable table = new JTable(model); 
     JTableHeader head = table.getTableHeader(); 

     Container c = getContentPane(); 
     c.setLayout(new BorderLayout()); 
     c.add("North", head); 
     c.add("Center",table); 
}  
public static void main(String[] args) throws NumberFormatException, IOException 
{ 
    Table t = new Table(); 
    t.setSize(500,400); 
    t.setVisible(true); 
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
}} 

该计划给了我一个表,但是行并没有完全填满的窗口。它显示了一个具有给定高度和宽度的窗口(以像素为单位)和相应的行数。在创建的行之后,显示一个额外的空间,因为行未填充到窗口中。任何人都可以帮助我从窗户上移除额外的空间。

对不起,我创建了一个输出图像,但上传图像时出现问题。

+0

'c.add(新JScrollPane的(表));',你可以摆脱其他两个'c.add'线。 'JTable#setFillsViewportHeight'也可能有帮助 – MadProgrammer

+0

你的意思是[像这样](http://stackoverflow.com/a/6175860/418556)? –

+0

不,我的意思是这样的:看到在下面的链接表中的第二张图片:[链接](http://stackoverflow.com/questions/18274975/setpreferredscrollableviewportsize-vs-setfillsviewportheight-in-jtable)我想要的是相同的格式为我的表在输出中 –

回答

3

如图所示here,你可以重写Scrollable方法getPreferredScrollableViewportSize()返回反映您最初的期望行数的值。每次添加一行时,封闭窗口“会导致此Window的大小适合其子组件的首选大小和布局”。

image

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 

/** 
* @see https://stackoverflow.com/a/37343900/230513 
* @see https://stackoverflow.com/a/37318673/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     class MyTableModel extends AbstractTableModel { 

      private int n = 8; 

      private void addRow() { 
       n++; 
       fireTableRowsInserted(n - 1, n - 1); 
      } 

      @Override 
      public int getRowCount() { 
       return n; 
      } 

      @Override 
      public int getColumnCount() { 
       return 4; 
      } 

      @Override 
      public Object getValueAt(int rowIndex, int colIndex) { 
       return "R" + rowIndex + ":C" + colIndex; 
      } 
     }; 
     MyTableModel model = new MyTableModel(); 
     JTable table = new JTable(model) { 
      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(super.getPreferredSize().width, 
        getRowHeight() * getRowCount()); 
      } 
     }; 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     f.add(new JScrollPane(table)); 
     f.add(new JButton(new AbstractAction("Add Row") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       model.addRow(); 
       f.pack(); 
      } 
     }), BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
相关问题