2017-02-16 1 views
0

Ich kann nicht die JTable in einem JFrame anzeigen. Eigentlich habe ich die Daten aus einer ArrayList extrahiert und die JTable Zeile für Zeile gefüllt. Ich habe überprüft, dass die JTable gefüllt ist, die Anzahl der Zeilen entspricht den Zeilen in der ursprünglichen ArrayList. Die Ausführung der Funktion zeigt jedoch eine leere GUI. Ich sehe das Problem wirklich in meinem Code nicht:JTable wird nicht in Jframe angezeigt

public Graphicalinterface4() { 
    //super (new GridLayout(1,0)); 

    //panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

    getdata2 in=new getdata2(); 
    try { 
     ArrayList<Piece> test=in.getList(); 
     ArrayList<Piece> classified=in.classify(test); 
     JTable table=getlocaltable(classified); 
     table.setFillsViewportHeight(true); 
     JScrollPane scrPane=new JScrollPane(table); 
     //scrPane.setSize(800,690); 
     //scrPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     this.add(scrPane); 

     //scrPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setVisible(true); 

    } 
    catch (IOException ex) { 
     ex.printStackTrace(); 
    } 


} 


public JTable getlocaltable(ArrayList<Piece> in) { 


    //new Object[]{"Type","Company","reference","description","price","To order"})); 

    //DefaultListModel<Piece> testlst=new DefaultListModel<Piece>(); 
    int sz=in.size(); 
    String[] columns=new String[] { 
      "Type","Company","reference","description","price","To order" 
    }; 
    DefaultTableModel model = new DefaultTableModel(); 
    //JTable table=new JTable(null, in.toArray()); 
    for (int i=0;i<sz;i++) { 
     Piece p=in.get(i); 

     String type=p.gettype(); 
     String company=p.getasc(); 
     String reference=p.getref(); 
     String description=p.getdesc(); 
     String price=p.getprice(); 
     String image=p.getimage(); 
     System.out.println(type); 
     //DefaultTableModel model=(DefaultTableModel) table.getModel(); 
     model.addRow(new Object[]{type,company,reference,description,price,Integer.toString(0)}); 
    } 
    JTable table=new JTable(model); 
    System.out.println(table.getRowCount()); 
    return table; 
} 


static Graphicalinterface4 ssp; 

public static void main(String[] args) throws IOException { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() {ssp=new Graphicalinterface4();} 
    }); 
} 
+0

1) Bitte lernen gemeinsame Java-Nomenklatur (Benennungskonventionen - zB 'EachWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', es sei denn es ist ein 'UPPER_CASE_CONSTANT') und benutze es konsistent. 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

Antwort

1
DefaultTableModel model = new DefaultTableModel(); 

Sie haben 0 Spalten in den TableModel. Die angezeigten Spalten werden durch die Spalten in TableModel bestimmt, nicht durch die Anzahl der Elemente in jeder Zeile. Das Hinzufügen von Datenzeilen hat keine Auswirkungen.

Lesen Sie die DefaultTableModel-API für den richtigen Konstruktor, der die Variable "columns" als Parameter akzeptiert.

0

Danke! Ich hatte das DefaultTableModel nicht korrekt initialisiert. In der API der String [] und Object [] [] {} invertiert (DefaultTableModel (String, Object [] [] {}), aber das funktioniert für mich.

public JTable getlocaltable(ArrayList<Piece> in) { 


    //new Object[]{"Type","Company","reference","description","price","To order"})); 


    int sz=in.size(); 
    String[] columns=new String[] { 
      "Type","Company","reference","description","price","To order" 
    }; 
    DefaultTableModel model = new DefaultTableModel(new Object[][]{}, columns); 
    //JTable table=new JTable(model); 
    for (int i=0;i<sz;i++) { 
     Piece p=in.get(i); 

     String type=p.gettype(); 
     String company=p.getasc(); 
     String reference=p.getref(); 
     String description=p.getdesc(); 
     String price=p.getprice(); 
     String image=p.getimage(); 
     System.out.println(type); 
     //DefaultTableModel model=(DefaultTableModel) table.getModel(); 
     model.addRow(new Object[]{type,company,reference,description,price,Integer.toString(0)}); 
    } 
    JTable table=new JTable(model); 
    System.out.println(table.getRowCount()); 
    return table; 
} 
+1

'Danke! Ich hatte das DefaultTableModel nicht richtig initialisiert. - Ich bin froh, dass mein Vorschlag geholfen hat. Vergessen Sie nicht, meine Antwort zu akzeptieren, indem Sie auf das Häkchen neben der Antwort klicken, damit die Leute wissen, dass das Problem gelöst wurde. Übrigens ist das NICHT der beste zu verwendende Konstruktor. Sie können den Konstruktor verwenden, der das Array von Spaltennamen zusammen mit einer Anzahl von Zeilen mit 0 annimmt. Bitte lesen Sie die API erneut. – camickr