Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除JTable底部多余的空白?_Java_Swing_Jtable_Jscrollpane - Fatal编程技术网

Java 如何删除JTable底部多余的空白?

Java 如何删除JTable底部多余的空白?,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,我已经编写了一个简单的程序来创建一个空的JTable。但是当我显示表格时,表格下方会显示一个额外的空白。现在我想删除表格行下方的空白 JTable程序: public class Table extends JFrame { Table() { int numColoumns=5; int numRows=10 ; String[] colHeadings = {"COLUMN1","COLUMN2","COLUMN3","COLUMN4","COLUMN

我已经编写了一个简单的程序来创建一个空的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);
}}
程序给了我一个表格,但是这些行没有完全填满窗口。它显示了一个以像素和相应行数表示的具有给定高度和宽度的窗口。在创建的行下面,它显示了一个额外的空间,因为这些行没有填充到窗口中。谁能帮我把窗户上多余的空间移走吗

很抱歉,我创建了输出的图像,但上载图像时出现问题。

如图所示,您可以重写该方法以返回反映初始所需行数的值。每次添加一行时,都会显示封闭窗口,该窗口“使此
窗口的大小符合其子组件的首选大小和布局。”

如图所示,您可以重写该方法以返回反映初始所需行数的值。每次添加一行时,都会显示封闭窗口,该窗口“使此
窗口的大小符合其子组件的首选大小和布局。”


c.add(新的JScrollPane(表))
,您可以去掉另外两行
JTable#setfillsviewperthweight
可能也有帮助吗?不,我的意思是这样的:请参见以下链接中的表的第二个图像:我希望输出
c.add中的表具有相同的格式(新的JScrollPane(表))
,您可以去掉另外两行
JTable#setfillsviewperthweight
可能也有帮助。你的意思是?不,我的意思是这样的:请参见以下链接中表格的第二个图像:我希望输出中表格的格式相同
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);
    }
}