2017-04-04 2 views
0

Ich versuche, alle Daten aus einer JSON-Datei und füllen Sie die Daten zu einem JTable, ich bekomme bereits die Daten aus der JSON-Datei und Ausdruck, aber ich kann nicht die Daten auf die JTable wenn ich versuchen Sie, die Daten auf der Jtable innerhalb der Schleife zu füllen Ich ended multipliziert den Rahmen in die Daten. Bitte helfen Sie mir dabei mein Code sind:Füllen JTabelle mit lokalen JSON-Datei

Ich habe bereits alle benötigten Glas importiert.

public Main(){ 
    super(new GridLayout(1,0)); 
    BufferedReader br = null; 
    JSONParser parser = new JSONParser(); 
    String inputline; 
    try { 
     br = new BufferedReader(new FileReader("/Users/lyod/Documents/sample.json")); 
     try { 
      String id = null, 
      component = null, 
      title = null, 
      lat = null, 
      lng = null, 
      cost = null, 
      status = null; 
      Object[][] data; 
      while ((inputline = br.readLine()) != null) { 
       JSONArray a = (JSONArray) parser.parse(inputline); 
       String[] columns = new String[] { 
        "Id", 
        "Title", 
        "Component", 
        "LAT", 
        "LNG", 
        "Cost" 
       }; 
       for (Object o : a) { 
        JSONObject sample = (JSONObject) o; 
        id = (String) sample.get("id"); 
        component = (String) sample.get("component"); 
        title = (String) sample.get("title"); 
        lat = (String) sample.get("lat"); 
        lng = (String) sample.get("lng"); 
        cost = (String) sample.get("cost"); 
        status = (String) sample.get("status"); 
        Object[][] data = new Object[][] { 
         {id,title,component,lat,lng,cost, false }, 
        }; 
       } 
       JTable table = new JTable(data, columns); 
       add(new JScrollPane(table)); 
       JFrame frame = new JFrame("test v2"); 
       frame.add(table); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String args[]){ 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Main(); 
     } 
    }); 
} 
+3

'wenn ich versuche, die Daten auf der Jtable innerhalb der Schleife zu füllen, habe ich am Ende multipliziert den Rahmen insted die Daten - genau. Warum würden Sie für jede Iteration der Schleife eine neue Tabelle und einen neuen Rahmen erstellen? Sie sollten nur eine Tabelle und einen Rahmen erstellen, NACHDEM die Schleife beendet ist. Die grundlegende Logik besteht also darin, vor dem Start der Schleife ein leeres DefaultTableModel zu erstellen. Innerhalb der Schleife verwenden Sie dann die Methode 'addRow (...)' des DefaultTableModel, um dem Modell Daten hinzuzufügen. Nachdem die Schleife beendet ist, verwenden Sie das TableModel, um die Tabelle zu erstellen und die Tabelle dem Rahmen hinzuzufügen. – camickr

+0

kann ich dann auf die Daten innerhalb der Schleife zugreifen? – LyodMichael

+0

Danke ich habe es verstanden! – LyodMichael

Antwort

2

Hier ist ein Beispiel, das Daten aus einer normalen Textdatei auffüllt. Es demonstriert die Konzepte des Lesens von Daten aus einer Datei innerhalb einer Schleife und dann das Erstellen der Tabelle, nachdem die Schleife beendet ist.

Ich weiß nicht, wie das Format einer JSON-Datei ist, aber das "Konzept" sollte das gleiche sein.

Ersetzen Sie also die Logik, die eine einzelne Datenzeile liest, und analysieren Sie die Daten mit der Logik, die eine Zeile mit JSON-Daten analysiert.