如何从 JTable 的底部删除多余的白色 space?
How to remove extra white space from the bottom of the JTable?
我编写了一个创建空 JTable 的简单程序。但是当我显示 Table 时,在 Table.Now 下面可以看到一个额外的白色 space 我想删除 table.[= 行下面的那个白色 space 12=]
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);
}}
程序给了我一个table,但是行没有完全填到window。它显示一个 window,具有给定的高度和宽度(以像素为单位)以及创建的相应行数 rows.Below 它显示额外的 space,因为这些行未填充到 window。谁能帮我从 window 中删除多余的 space。
抱歉,我创建了输出图像,但上传图像时出现问题。
如图所示 , you can override the Scrollable
method getPreferredScrollableViewportSize()
to return a value that reflects your initial desired row count. Each time a row is added, pack()
封闭 window,其中 "Causes this Window
to be sized to fit the preferred size and layouts of its subcomponents."
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
* @see
*/
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);
}
}
我编写了一个创建空 JTable 的简单程序。但是当我显示 Table 时,在 Table.Now 下面可以看到一个额外的白色 space 我想删除 table.[= 行下面的那个白色 space 12=]
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);
}}
程序给了我一个table,但是行没有完全填到window。它显示一个 window,具有给定的高度和宽度(以像素为单位)以及创建的相应行数 rows.Below 它显示额外的 space,因为这些行未填充到 window。谁能帮我从 window 中删除多余的 space。
抱歉,我创建了输出图像,但上传图像时出现问题。
如图所示 Scrollable
method getPreferredScrollableViewportSize()
to return a value that reflects your initial desired row count. Each time a row is added, pack()
封闭 window,其中 "Causes this Window
to be sized to fit the preferred size and layouts of its subcomponents."
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
* @see
*/
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);
}
}