[英]How to change column width of a table
對於以下代碼,我無法將列大小設置為自定義大小。 為什么會這樣呢?第一列也沒有顯示。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
public class Trial extends JFrame{
public void create(){
JPanel jp = new JPanel();
String[] string = {" ", "A"};
Object[][] data = {{"A", "0"},{"B", "3"},{"C","5"},{"D","-"}};
JTable table = new JTable(data, string);
jp.setLayout(new GridLayout(2,0));
jp.add(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumn column = null;
for (int i = 0; i < 2; i++) {
column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(20); //custom size
}
setLayout(new BorderLayout());
add(jp);
}
public static void main(String [] a){
Trial trial = new Trial();
trial.setSize(300,300);
trial.setVisible(true);
trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE);
trial.create();
}
}
您在這里遇到了幾個問題。 首先, 始終從Swing EDT初始化JFrame,如下所示:
public static void main(String[] a) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Trial trial = new Trial();
trial.setSize(300, 300);
trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE);
trial.create();
}
});
}
否則會導致細微的錯誤。 第二:JTables喜歡存在於JScrollPanes中。 這就是為什么看不到列標題的原因:
JScrollPane pane = new JScrollPane();
pane.setViewportView(table);
jp.add(pane);
完成上述操作后,我將看到您的細小的小列,每列20像素寬。
如果將自動調整大小模式設置為關閉,則在布置表格時將完全不調整列寬。 從JTable的doLayout()文檔中:
AUTO_RESIZE_OFF:完全不會自動調整列的寬度。 當列的總和超過視口的寬度時,請使用水平滾動條來容納它們。 如果JTable未包含在JScrollPane中,則可能會使表的某些部分不可見。
嘗試將JTable
添加到JScrollPane
,然后將其添加到面板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.