SWING rozmiar JTableColumn a JTextField?

0

Mam mały problme z ustaleniem rozmiaru komponnentów okna. Założenie jest takie aby pole JTextField przyjmowało rozmiar kolumny modelu tabelki (DefaulTableModel). Niby prosta sprawa, pobieram rozmiar kolumy i wstawiam go jaki rozmiar pola (chodzi mi tylko o długość).
Ku mojemu zdizwinie nawet po takiej zmianie długości komponentów są różne. Może robie cos źle? a może problem leży w czyms innym? inaczej liczone długość?

initComponents();  
    
  table.setModel(new javax.swing.table.DefaultTableModel(data,col){
            Class[] types = new Class []{java.lang.String.class,java.lang.Integer.class,java.lang.Double.class,java.lang.Boolean.class};               
            public Class getColumnClass(int columnIndex) {return types [columnIndex];}});
  
  TableColumn columnCompany = table.getColumnModel().getColumn(0);
  int companyWidth = columnCompany.getWidth();

  companyField.setSize(companyWidth,20); 
  panel.add(companyField);
1

Moim zdaniem, kod nie ma prawa działać. Odczytujesz szerokość kolumny, która jeszcze nie jest wyświetlona. Ja z reguły ustalam szerokość wszystkich kolumn wywołując w pętli po kolumnach metodę setPreferredWith(...). W takim przypadku zadziała kod:

  int companyWidth = columnCompany.getPreferredWidth();
  companyField.setPreferredSize(new Dimension(companyWidth,20));

Niestety, przy zmianie szerokości okna, rozmiar pola tekstowego nie ulega zmianie. Musisz wywołać dla okna setResizable(false) lub dodać do okna ComponentListenera i samemu zmieniać wielkość pola tekstowego.

1

trzy metody odwoluja sie do rozmiarow nie wyswietlonego komponentu min, max , preffered. Zreszta kolega wyzej juz to napisal. W celu zmiany komponentu gdy zmieniasz wielkosc okna musisz odmalowac na nowo komponent w tym celu albo tworzysz swoj komponent dziedziczac ze standardu albo przeciazasz malowanie komponentu

0

I wszystko jasne, dzieki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1