2017-01-22 53 views
0

我的程序能夠讀取我的.txt文件,但由於某種原因,它無法將該數據放在我的表上。 (如果你需要我的代碼的任何其他部分,請告訴我)。我不確定究竟是什麼問題,但我已經嘗試幾乎所有的方法將其輸入到表格中,似乎沒有任何工作。我能夠手動輸入數據到表格中(使用創建按鈕),但由於某種原因,我無法導入數據。我無法讓我的程序從txt導入數據到Jtable

//initializing all of the buttons (and jtable, scroll pane) 
this.jScrollPane1 = new JScrollPane(); 
this.pokeTable = new JTable(); 
this.programTitle = new JLabel(); 
this.searchText = new JTextField(); 
this.searchButton = new JButton(); 
this.createButton = new JButton(); 
this.deleteButton = new JButton(); 
this.displayInstructionsButton = new JButton(); 
this.exportPokedex = new JButton(); 

//sets close operation 
setDefaultCloseOperation(3); 

//makes my Jtable 
    this.pokeTable.setModel(new DefaultTableModel(
    new Object[0][], 
    new String[] {"Name", "Region", "PokeNumber", "Type", "Habitat" }) //creating column headings 
    { 
    boolean[] canEdit = new boolean[5]; 

    public boolean isCellEditable(int rowIndex, int columnIndex) //makes all of the cells editable 
    { 
     return this.canEdit[columnIndex]; 
    } 
    }); 


    IO.openInputFile("data/pokemon.txt"); 
    int j =0; 
    while(IO.readLine()!=null){ 
    j++; 
    } 
    IO.closeInputFile(); 

    IO.openInputFile("data/pokemon.txt"); 

    String[] pokemon2 = new String[5]; 

    for(int i = j; i!=0; i--) 
    { 

    String s = IO.readLine(); 
    pokemon2 = s.split(","); 


    DefaultTableModel model = (DefaultTableModel)this.pokeTable.getModel(); 
    model.addRow(new Object[] { pokemon2[0], pokemon2[1], Integer.valueOf(pokemon2[2]), pokemon2[3], pokemon2[4] }); 
    new Pokemon (pokemon2[0], pokemon2[1], Integer.valueOf(pokemon2[2]), pokemon2[3], pokemon2[4]); 
    for(int f = 0; f < pokemon2.length; f++){ 
     System.out.println(pokemon2[f]); 
     System.out.println(""); 
    } 
    } 

    IO.closeInputFile(); 

this.jScrollPane1.setViewportView(this.pokeTable); //makes table able to scroll 
this.jScrollPane1.getViewport().setBackground(new Color (233, 116, 81)); //sets background of table (not cell colour) 
//end of intializing JTable 

//sets title of the program 
this.programTitle.setText("Pokedex"); 
+1

使用SO作爲調試器是一個糟糕的主意。就調試小程序而言,您嘗試過什麼?你是否試圖調試或打印值來測試你的斷言? – jdv

回答

0

我的建議對你會分裂不同的變量,你正在嘗試做的太多了一步到位,而不是

this.pokeTable.setModel(new DefaultTableModel(
new Object[0][],new String[] {"Name", "Region", "PokeNumber", "Type", "Habitat" }) 

創建獨立的變量

String[] headers = {"Name", "Region", "PokeNumber", "Type", "Habitat" }; 
Object[][] arr = new Object[fileLength][headers.length]; 
DefaultTableModel model = new DefaultTableModel(arr, headers); 
this.pokeTable.setModel(model); 

一般來說,這可以清除許多小錯誤,然後不斷編寫檢查語句以精確地縮小發生問題的位置;當它工作時,可以將其縮小爲一行,但分解它往往足以發現並修復錯誤。在嘗試創建表之前,可能嘗試先填充數組。一些代碼,我有實現這種效果,但與數據庫是:

Object[][] data; 

//Get data from table and convert to 2D array 
data = new Object[len][collumnNames.length]; 
String sql = "SELECT * FROM SHM"; 
ResultSet rs = st.executeQuery(sql); 
int x = 0; 
while (rs.next()){ 
    for(int i = 0; i < collumnNames.length; i++){ 
     data[x][i] = new Double(rs.getDouble(collumnNames[i])); 
    }     
    x++; 
} 
rs.close(); 
//Output data 
JFrame frame = new JFrame("Table"); 
TableModel model = new DefaultTableModel(data, collumnNames); 
JTable table = new JTable(model); 
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
frame.add(new JScrollPane(table)); 
frame.setAlwaysOnTop(true); 
frame.pack(); 
frame.setVisible(true); 

嘗試在這種格式的實現它,分割它,以確保你的工作,將其放入之前從文件創建2Darray表,而不是創建一個表,並試圖以這種方式添加新的行;如果您稍後想要添加新行,請重新將表重新繪製出來。如果這仍然行不通,我不確定抱歉。

0

DefaultTableModel model = (DefaultTableModel)this.pokeTable.getModel();嘗試將此線路置於for循環之外並重試。

相關問題