2012-10-28 93 views
0

我寫了一個方法,它創建了我的DefaultTableModel,然後我將添加我的記錄。 當我將模型設置爲JTable時,數據行是空白的。滾動數據後顯示正確。僅在滾動後顯示JTable數據

我該如何避免這種情況並從第一時間顯示數據?

編輯:我導入了javax.swing.table.DefaultTableModel - >這是正確的嗎?

private DefaultTableModel _dtm; 

private void loadTable(Vector<Member> members) { 
    loadTableModel(); 

    try { 
     lbl_state.setText("Please wait"); 

     for (Member actMember : members) { 
      String gender = ""; 
      if (actMember.getGender() == MemberView.MEMBER_MALE) { 
       gender = "männlich"; 
      } else { 
       gender = "weiblich"; 
      } 

      _dtm.addRow(new Object[]{ 
         actMember.getNname(), 
         actMember.getVname(), 
         actMember.getCity(), 
         actMember.getStreet(), 
         actMember.getPlz(), 
         actMember.getMail(), 
         actMember.getPhonenumber(), 
         actMember.getBirthdayString(), 
         actMember.getStartDateString(), 
         gender, 
         actMember.getBankname(), 
         actMember.getAccountnumber(), 
         actMember.getBanknumber(), 
         actMember.getGroup().toString(), 
         (actMember.hasAccess() ? "JA" : "NEIN"), 
         actMember.getWriteDateString(), 
         (actMember.hasDrinkAbo() ? "JA" : "NEIN") 
        }); 
     } 
    } catch (Exception ex) { 
     System.err.println(ex.getMessage()); 
    } 

    tbl_results.setModel(_dtm); 
} 

private void loadTableModel() { 
    _dtm = new DefaultTableModel(new Object[]{"Nachname", 
       "Vorname", 
       "Ort", 
       "Straße", 
       "PLZ", 
       "E-Mail", 
       "Telefon", 
       "Geburtsdatum", 
       "Beitrittsdatum", 
       "Geschlecht", 
       "Bankname", 
       "Kontonummer", 
       "Bankleitzahl", 
       "Gruppe", 
       "hat Zugriff", 
       "Einschreibdatum", 
       "Getränkeabo"}, 0); 

    tbl_results.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
} 
+4

爲更好地幫助發佈一個[SSCCE](http://sscce.org/),否則這裏的一切都可能拍攝到黑暗中, – mKorbel

+1

是的,在這裏,SSCCE是非常必要的,因爲所示的代碼沒有指出任何特定的問題。 –

+0

這可能是由EDT違規問題造成的。確保在添加數據之前將數據添加到表格模型中,如果您在添加數據之前設置了表格模型,或者在填充模型後將模型設置爲EDT模型 – MadProgrammer

回答

0

TABLE WAS INVISIBLE

我檢查了我的代碼中的每一行,並顯示我設置了我的表不可見。 只有當我添加數據並將其設置爲可見時。所以我看不到我的數據並選擇行。

0

可以「欺騙」,用簡單的代碼可模擬滾動,也可以填充表後重新繪製框架。也許看看這個:JTable How to refresh table model after insert delete or update the data.

+0

我沒有找到一些代碼或提示,如何我可以'欺騙'滾動..!?按照建議,發佈SSCCE, –

+0

。我不是專家,但十個重繪元素中的九個解決了問題。 「作弊」將使用代碼進行滾動。要知道如何只是谷歌它( - : –

+1

@ Christian'fuzi'Orgler不要作弊,這是一個跛腳的解決方案,只會給你帶來更多的問題,而不是解決方案,如果你真的想解決這個問題,發佈[SSCCE]( http://sscce.org)當你使用DefaultTableModel的API時,你不需要調用fireTableStructureChanged()和fireTableDataChanged,它會自己爲你做。 –

2

簡單的答案是,它應該工作。你不應該被要求做任何額外的行動。

代碼的方式,我沒有看到它不工作的任何理由。我剛剛用我自己的例子嘗試過,它工作正常。

但是,請確保以下幾點:

  • JTable添加到JScrollPane正確
  • JScrollPane正確添加到面板
  • 你的模型設置爲正確JTable
+0

+1這是唯一有效的答案我在這裏找到了,但是這個神祕的東西仍然存在;-) –