[英]Swing - remove extra space from JScrollPane so that it only fits the table rows
我是 swing 的新手。我从对象数组列表创建了一个表。 我想知道如何从表格下方删除访问空白区域 - 即调整 JScrollPane 的大小,使其适合表格而不留下任何额外空间。
这是我的代码
import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
public class PersonTableModel extends AbstractTableModel{
private String[] columnNames = {"Name","Date of Birth","Type"};
private ArrayList<Person> list;
public PersonTableModel(ArrayList<Person> personList){
this.list = personList;
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object temp = null;
if (columnIndex == 0) {
temp = list.get(rowIndex).getName();
}
else if (columnIndex == 1) {
temp = list.get(rowIndex).getDOB().getDate();
}
else if (columnIndex == 2) {
if(list.get(rowIndex) instanceof Teacher)
temp = "Teacher";
else
temp = "Student";
}
return temp;
}
public String getColumnName(int col) {
return columnNames[col];
}
}
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
import java.util.ArrayList;
public class PersonTable extends JFrame{
JTable myTable;
PersonTableModel tableModel;
ArrayList<Person> list;
// contructor
public PersonTable(ArrayList<Person> list){
this.list = list;
tableModel = new PersonTableModel(list);
myTable = new JTable(tableModel);
setBounds(10,10,600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane(myTable);
JPanel panel = new JPanel();
panel.add(scrollPane);
add(panel,BorderLayout.CENTER);
}
}
提前致谢。
设置表的 model 后,您可以使用:
myTable.setPreferredScrollableViewportSize(myTable.getPreferredSize());
此外,您需要添加以下内容,而不是使用 setBounds(...)
pack()
在构造函数的底部,因此可以适当调整框架的大小。
请注意,这适用于行数有限的表。 对于大表,您可能希望在需要滚动之前限制显示的行数。 在这种情况下,您可以覆盖getPreferredScrollableViewportSize()
方法,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.