簡體   English   中英

如何更改表格的列寬

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM