2013-04-06 14 views
10

Szukałem rozwiązania, aby móc zwiększyć wysokość rzędu w JTable. Używałem metody setRowHeight (int int), która kompiluje i działa poprawnie, ale nie zwiększyła się liczba wierszy [s]. Kiedy używam metody getRowHeight (int) dla wiersza, dla którego ustawiłem wysokość, wydrukuje on rozmiar, do którego zwiększyłem wiersz, więc nie jestem pewien, co jest nie tak. Poniższy kod jest przybliżoną ilustracją tego, jak próbuję go rozwiązać.Ustawianie wysokości wiersza w JTable w java

Moja klasa rozszerza JFrame.

String[] columnNames = {"Column 1", "Column 2", "Column 1 3"}; 

JTable table = new JTable(new DefaultTableModel(columnNames, people.size())); 

DefaultTableModel model = (DefaultTableModel) table.getModel(); 

int count =1; 
for(Person p: people) 
{ 
    model.insertRow(count,(new Object[]{count, p.getName(), p.getAge()+"", 
    p.getNationality})); 
    count++; 
} 

table.setRowHeight(1, 15);//Try set height to 15 (I've tried higher) 

Czy ktoś może mi powiedzieć, gdzie idę źle? Próbuję zwiększyć wysokość rzędu od 1 do 15 pikseli?

+2

'I ponownie mój kod umieszczony jako przykład tego, a ja nawet zwiększona do wysokości do 100, a jeszcze visable increase'. Dlatego powinieneś opublikować [SSCCE] (http://sscce.org/), który pokazuje problem. To, że mówisz, że coś robisz, nie oznacza, że ​​to robisz. Być może przez pomyłkę zdefiniowałeś dwie tabele i zmieniasz właściwość tabeli, która nie jest faktycznie wyświetlana. – camickr

+0

Przepraszam, wykorzystałem metodę setRowHeight (int int) w pętli, ale zmieniono ją na setRowHeight (int) i działa teraz idealnie. Dzięki za odpowiedzi, bardzo cenne –

Odpowiedz

13

Nie jestem pewien, jaki jest zamiar pozostawienia pierwszego wiersza w indeksie 0 pustym. Wiersze w JTable działają z indeksu 0. Najlepiej, jeśli możesz opublikować pełny przykład (np. SSCCE), który pokazuje problemy. Porównaj z tego prostego przykładu, który działa OK:

enter image description here

import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class DemoTable { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("DemoTable"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     DefaultTableModel model = new DefaultTableModel(); 
     model.setColumnIdentifiers(new Object[] { 
       "Column 1", "Column 2", "Column 3" }); 

     JTable table = new JTable(model); 
     for (int count = 0; count < 3; count++){ 
      model.insertRow(count, new Object[] { count, "name", "age"}); 
     } 
     table.setRowHeight(1, 30); 

     frame.add(new JScrollPane(table)); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+1

Dziękuję bardzo za odpowiedź. Ponownie ułożyłem kod jako twój przykład, teraz działa.Bardzo doceniane –

+0

@DouglasGrealis Nie ma za co, cieszę się, że ci pomogło! :) – tenorsax

11

Można użyć:

lub jeśli chcesz ustawić wysokość wiersza do określonego wiersza, użytkowania:

table.setRowHeight(int par1, int par2);

+0

Dzięki za odpowiedź. Jak widzisz w moim kodzie, już go wywołałem, ale nie wydaje się, aby cokolwiek zrobić. –

+0

Spróbuj użyć metody model.setRowHeight()? od czasu wywołania metody getModel() ze zmiennej tabeli – madcrazydrumma

+0

próbowałem tam, a kompilator wyprowadza: nie może znaleźć symbolu setRowHeight w lokalizacji DefaultTableModel? Jeszcze raz dziękuję –

2

Można również dodać tableModelListener?

model.addTableModelListener(new TableModelListener() { 
    @Override public void tableChanged(final TableModelEvent e) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override public void run() { 
       table.setRowHeight(e.getFirstRow(), 15); //replace 15 with your own height 
      } 
     }); 
    } 
}); 
+0

Dzięki za odpowiedź. Czy zastąpiłbym te metody poza Konstruktorem? Wraz z JTable –

+0

To właśnie zrobiłem @DouglasGrealis. Moja klasa JTable stała się TableModelListener i mój model tabeli dodał ją jako TableModelListener. – user1283704

Powiązane problemy