2014-12-05 109 views
1

我有一個JTable,我試圖用位於特定文件夾中的文件名填充。Java JTable不填充DefaultTableModel

我可以加載JTable,它看起來好像是從數據填充,但沒有測試出現在JTable行中。

我可以告訴它的加載文件,因爲當我在文件夾中放置2個文件時,JTable在加載時創建2行。我可以更改文件夾中的文件數量,當我重新運行程序時,它會將確切的行數加載到文件夾中的文件中。

任何想法?我用這種填充其他幾個表的方法,他們似乎工作,所以我真的很困惑,爲什麼這個沒有。

package testTable; 

import java.awt.BorderLayout; 


public class main extends JFrame { 

public JPanel contentPane; 
public JTable table; 
public DefaultTableModel rulesModel; 


/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       main frame = new main(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
@SuppressWarnings("serial") 
public main() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 

    JScrollPane scrollPane = new JScrollPane(); 
    GroupLayout gl_contentPane = new GroupLayout(contentPane); 
    gl_contentPane.setHorizontalGroup(
     gl_contentPane.createParallelGroup(Alignment.TRAILING) 
      .addGroup(Alignment.LEADING, gl_contentPane.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)) 
    ); 
    gl_contentPane.setVerticalGroup(
     gl_contentPane.createParallelGroup(Alignment.LEADING) 
      .addGroup(gl_contentPane.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 187, GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(54, Short.MAX_VALUE)) 
    ); 




    rulesModel = new DefaultTableModel(); 
    rulesModel.setColumnIdentifiers(new String[] {"File Name"}); 
    table = new JTable(rulesModel) { 
     public boolean isCellEditable(int row, int column) { 
      return false; 
     } 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      return (Component) null; 
     } 
    }; 


    File folder = new File("C:\\Scripts\\new\\files\\folder\\"); 
    File[] listOfFiles = folder.listFiles(); 

    for (File file : listOfFiles) { 
     if (file.isFile()) { 
      String filename = file.getName(); 

      rulesModel.addRow(new String[] {filename}); 
      System.out.println(filename); 
     } 
    }  




    table.setModel(rulesModel); 
    scrollPane.setViewportView(table); 
    contentPane.setLayout(gl_contentPane); 
} 


} 

回答

2

這是搞亂您:

public Component prepareRenderer(TableCellRenderer renderer, int row, 
     int column) { 
    return (Component) null; 
} 

它需要的任何單元格渲染器存在對JTable,扔它放在一邊,從而保證該表將不會顯示任何信息。所以擺脫這種錯誤的覆蓋。

雖然這確實乞討的問題:
爲什麼這個代碼甚至在那裏,因爲它保證確保沒有任何顯示?爲什麼擺脫細胞渲染器?

+0

AHHH !!!我沒有看到的一件事。我從另一個地方複製了這個代碼片斷,我重寫了這個來改變行的顏色。我計劃在這裏做類似的事情,所以當我準備好使用它時,我就把這部分代碼留下了。 最終,我將使用該覆蓋,但不是現在的方式。謝謝您的幫助!! – luskbo 2014-12-05 20:07:39