2013-04-06 11 views
10

Ich habe nach einer Lösung gesucht, um die Höhe einer Zeile in einer JTable erhöhen zu können. Ich habe die Methode setRowHeight (int int) verwendet, die kompiliert und ausgeführt wird, aber keine Zeile [s] wurde erhöht. Wenn ich die Methode getRowHeight (int) der Zeile verwende, auf die ich die Höhe setze, wird die Größe, um die ich die Zeile vergrößert habe, ausgedruckt, so dass ich nicht sicher bin, was falsch ist. Der Code unten ist eine grobe Illustration, wie ich versuche, es zu lösen.Einstellen der Höhe einer Zeile in einer JTable in Java

Meine Klasse erweitert 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) 

Kann mir jemand sagen, wo ich falsch liege? Ich versuche, die Höhe von Zeile 1 auf 15 Pixel zu erhöhen?

+2

'ich wieder meinen Code wie dieses Beispiel angeordnet ist, und ich habe sogar erhöht Höhe bis 100, und noch visable Preisanhebung. Aus diesem Grund sollten Sie Ihre [SSCCE] (http://sscce.org/) veröffentlichen, die das Problem veranschaulicht. Nur weil du sagst, dass du etwas tust, heißt das nicht, dass du es tatsächlich tust. Möglicherweise haben Sie versehentlich zwei Tabellen definiert und ändern die Eigenschaft einer Tabelle, die nicht tatsächlich angezeigt wird. – camickr

+0

Sorry, mein Fehler, ich habe die Methode setRowHeight (int int) in der Schleife verwendet, aber sie in setRowHeight (int) geändert und sie funktioniert jetzt einwandfrei. Danke für die Antworten, viel appreicated –

Antwort

13

Nicht sicher, was die Absicht ist, die erste Zeile bei Index 0 leer zu lassen. Zeilen in JTable laufen von Index 0. Es ist am besten, wenn Sie ein vollständiges Beispiel (dh SSCCE) veröffentlichen könnten, das die Probleme veranschaulicht. Vergleichen Sie zu diesem einfachen Beispiel, das OK funktioniert:

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

Vielen Dank für die Antwort. Als ich den Code als Beispiel anordne, funktioniert es jetzt.Sehr geschätzt –

+0

@DouglasGrealis Gern geschehen, ich bin froh, dass es Ihnen geholfen hat! :) – tenorsax

11

können Sie verwenden:

oder wenn Sie die Zeilenhöhe für eine bestimmte Zeile, die Verwendung setzen wollten:

table.setRowHeight(int par1, int par2);

+0

Danke für die Antwort. Wie Sie in meinem Code sehen können, habe ich ihn bereits aufgerufen, scheint aber nichts zu tun. –

+0

Versuchen Sie es mit model.setRowHeight()? seit dem Aufruf der getModel() -Methode von der Tabellenvariablen – madcrazydrumma

+0

habe ich das dort ausprobiert, und der Compiler gibt folgendes aus: Kann das Symbol setRowHeight an der Stelle DefaultTableModel nicht finden? Danke wieder –

2

Sie können auch hinzufügen, einen 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

Danke für die Antwort. Würde ich diese Methoden außerhalb des Konstruktors außer Kraft setzen? Zusammen mit der JTable –

+0

Das ist, was ich @DouglasGrealis gemacht habe. Meine JTable-Klasse wurde zu einem TableModelListener und mein Tabellenmodell fügte sie als TableModelListener hinzu. – user1283704