gpt4 book ai didi

java - 如何从 JTable 底部删除多余的空白?

转载 作者:行者123 更新时间:2023-12-01 17:58:53 26 4
gpt4 key购买 nike

我编写了一个简单的程序来创建一个空的 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);
}}

程序给了我一个表格,但行没有完全填充到窗口。它显示了一个具有给定高度和宽度(以像素为单位)以及相应行数的窗口。在创建的行下方,它显示了一个额外的空间,因为行未填充到窗口中。谁能帮我删除窗口上的多余空间。

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

最佳答案

如图here ,您可以覆盖 Scrollable方法getPreferredScrollableViewportSize()返回一个反射(reflect)您初始所需行数的值。每次添加一行,pack()封闭窗口,它“导致此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);
}
}

关于java - 如何从 JTable 底部删除多余的空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42431121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com