2013-12-18 22 views
1

我一直被困在一個看似簡單的問題幾個小時,而我找不到解決方案。我正嘗試在Java中實現一個非常簡單的論壇,並且我正試圖在此時加載entrys。通過JDBC在JList中獲取數據 - 缺失的鏈接

我的論壇是一個JList,它填充了JPanels,它接受通過JLists DefaultListModeladdMessage方法的條目。所以,如果我不向數據庫中添加一個條目,它看起來像這樣:

MessageList m = new MessageList(); 

m.addMessage("NAME AUTOR", "<html><body style='width: 675px;'>Lorem ipsum dolor sit amet.", "22.01.13", "SOA"); 

給messageManager類看起來是這樣的:

public class MessageList extends JList{ 

DefaultListModel messageModel = new DefaultListModel(); 

    MessageRenderer messageRenderer = new MessageRenderer(); 

    public MessageList(){ 
     this.setCellRenderer(messageRenderer); 
     this.setModel(messageModel); 

    } 

    public void addMessage(String author, String text, String date, String tag){ 
     messageModel.addElement(new Message(author, text, date, tag)); 
    } 

} 

我也寫的代碼得到一個ArrayList(稱爲allBtr)與從數據庫中的消息對象(稱爲ConBeitrag):

ArrayList<ConBeitrag> allBtr = new ArrayList<ConBeitrag>(); 

ConBeitrag conBtr = new ConBeitrag(); 

try { 
    allBtr = conBtr.getAllBtr(); 
} catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

的消息對象看起來像這樣:

public class ConBeitrag { 

    private int beitragid; 
    private int projektid; 
    private int mitarbeiterid; 
    private String beitragText; 
    private String erstellt_am; 
    private String geaendert_am; 
    private String schlagwort1; 
    private String schlagwort2; 

    private MdBeitrag mdBtr = new MdBeitrag(); 

    public ConBeitrag(){ 

    } 

    public ConBeitrag(int beitragid, int projektid, int mitarbeiterid, String beitragText, String erstellt_am, String geaendert_am){ 

     this.beitragid = beitragid; 
     this.projektid = projektid; 
     this.mitarbeiterid = mitarbeiterid; 
     this.erstellt_am = erstellt_am; 
     this.geaendert_am = geaendert_am; 
     this.beitragText = beitragText; 
     this.schlagwort1 = schlagwort1; 
     this.schlagwort2 = schlagwort2; 
    } 

    public ArrayList<ConBeitrag> getAllBtr() throws SQLException{ 

     MdBtrInterface modInt; 
     modInt = new MdBeitrag(); 

     ArrayList<ConBeitrag> AlBtr = modInt.getAllBtr(); 

     for(ConBeitrag object: AlBtr){ 
       System.out.println(object.beitragText); 
     } 

     return AlBtr; 

    } 
} 

現在被拿到ArrayList到,我可以傳遞到addMessage方法的形式,最聰明的辦法嗎?我從GUI結束,然後從數據庫結束,現在我陷入了中間。

重寫的toString()方法:

@Override 
public String toString() { 
    return mitarbeiterid + beitragstext + erstellt_am + schlagwort1 + schlagwort2; 
} 
+0

是'ConBeitrag'「消息」是一些其他語言嗎? –

+0

是的,有些術語是德語。 「ConBeitrag」或多或少是「ConMessage」。 – cflx

+0

當你嘗試'addMessage()'時會發生什麼? –

回答

2

「的消息被存儲ArrayList的內部作爲對象是否有幫助所以如果用完 「的System.out.println(allBtr);」​​ 它給我 「[ConBeitrag @ 48f4104f,ConBeitrag @ f5ad7f4,ConBeitrag @ 1517dc0c]」

你需要重寫toString方法在ConGeitrag類。像這樣的事情。

public class ConBeitrag {  
     ... 

     @Override 
     public String toString(){ 
       return author + ", " + text + ", " + date + ", " + tag; 
     } 
    } 

您可以使return任何您想要的格式。測試這一個,並根據需要對格式進行更改。

嘗試了這一點作爲一個輔助方法(你已經覆蓋了toString後)

public JList createJList(ResultSet rs){ 

     DefaultListModel model = new DefaultListModel(); 

     while (rs.next()){ 
      String author = rs.getString("author"); // Just an example. You may 
      String text = rs.getString("text");  // need to retrieve your 
      String date = rs.getString("date");  // data differently 
      String tag = rs.getString("tag"); 

      Message message = new Message(author, text, date, tag); 
      model.addElement(message); 
     } 

     JList list = new JList(model); 

     return list; 
    } 

我真的不認爲需要自定義JList的這種局面。

測試運行:輸出:3testtestnullnull。除了格式化,它工作正常

public class ConBeitragTest { 

    public static void main(String[] args) { 
     ConBeitrag con = new ConBeitrag(1, 2, 3, "test", "test", "test"); 
     System.out.println(con); 
    } 
} 

class ConBeitrag { 

    private int beitragid; 
    private int projektid; 
    private int mitarbeiterid; 
    private String beitragText; 
    private String erstellt_am; 
    private String geaendert_am; 
    private String schlagwort1; 
    private String schlagwort2; 

    public ConBeitrag() { 

    } 

    public ConBeitrag(int beitragid, int projektid, int mitarbeiterid, String beitragText, String erstellt_am, String geaendert_am) { 

     this.beitragid = beitragid; 
     this.projektid = projektid; 
     this.mitarbeiterid = mitarbeiterid; 
     this.erstellt_am = erstellt_am; 
     this.geaendert_am = geaendert_am; 
     this.beitragText = beitragText; 
     this.schlagwort1 = schlagwort1;   // This is null 
     this.schlagwort2 = schlagwort2;   // This is null 
    } 

    @Override 
    public String toString() { 
     return mitarbeiterid + beitragText + erstellt_am + schlagwort1 + schlagwort2; 
    } 

} 
+0

嗯,我認爲這應該是,但奇怪的是它不會工作。我像你描述的那樣在ConBeitrag中實現了toString方法,但如果我在ConBeitrag對象上調用toString(),它仍會打印ConBeitrag @ f5ad7f4。現在不應該打印出我們在return語句中指定的格式的東西嗎?我運行System.out.println(a.toString());其中a是我用ConBeitrag a = allBtr.get(0);指定的ConBeitrag對象。 – cflx

+1

你可以編輯你的文章,以顯示你是如何擁有它。 –

+0

更新了它,return語句的確切語法當然尚未實現。 – cflx