2010-04-08 3 views
1

Для следующего кода я не могу установить размер столбца нестандартного размера. Почему это так? Также первый столбец не отображается.Как изменить ширину столбца таблицы

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(); 
    } 
} 

ответ

3

У вас здесь пара проблем. В первую очередь, Всегда инициализации JFrame из свинг EDT как таковой:

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 пикселей в ширину.

2

Если режим автосохранения установлен на значение, ширина столбца не будет полностью настроена, когда таблица будет выложена. Из doLayout() документации для JTable:

AUTO_RESIZE_OFF: Не автоматически регулировки ширины столбца на всех. Используйте горизонтальную полосу прокрутки, чтобы разместить столбцы, когда их сумма превышает ширину окна просмотра . Если JTable не заключен в JScrollPane, то может оставлять части таблицы невидимыми.

Попробуйте добавить JTable к JScrollPane, а затем, добавив, что к панели.

Смежные вопросы