2017-02-16 12 views
0

Мне не удается отобразить JTable в JFrame. Фактически я извлек данные из ArrayList и заполнил строку JTable подряд за строкой. Я проверил, что JTable заполнен, количество строк равно строкам в исходном ArrayList. Однако запуск функции показывает пустой графический интерфейс. Я действительно не вижу проблемы в моем коде:JTable не отображается в Jframe

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) Пожалуйста, узнать общую Java номенклатурой (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'UPPER_CASE_CONSTANT') и использовать его последовательно. 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

1
DefaultTableModel model = new DefaultTableModel(); 

У вас 0 столбцов в TableModel. Отображаемые столбцы определяются столбцами в TableModel, а не количеством элементов в каждой строке. Поэтому добавление строк данных не влияет.

Прочтите API DefaultTableModel для соответствующего конструктора, который будет принимать переменную «столбцы» в качестве параметра.

0

Спасибо! Я не правильно инициализировал DefaultTableModel. В API струнный [] и Object [] [] {} инвертируются (DefaultTableModel (String, Object [] [] {}), но это работает для меня.

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

'Спасибо! Я не правильно инициализировал DefaultTableModel. '- рад, что мое предложение помогло. Не забудьте «принять» мой ответ, нажав на галочку рядом с ответом, чтобы люди знали, что проблема решена. Кстати, это НЕ лучший конструктор для использования. Вы можете использовать конструктор, который принимает массив имен столбцов вместе с рядом строк, равным 0. PLease перечитывает API. – camickr