Как изменить ширину столбца таблицы - PullRequest
1 голос
/ 08 апреля 2010

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

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

Ответы [ 2 ]

3 голосов
/ 08 апреля 2010

У вас есть пара вопросов здесь. Прежде всего, Всегда инициализируйте JFrame из Swing 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 голосов
/ 08 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...