2013-12-18 3 views
1

Я застрял в кажущейся простой проблеме часами, и я просто не могу найти решение. Я пытаюсь реализовать очень простой Форум в Java, и я пытаюсь загрузить записи в данный момент.Получение данных в JList через JDBC - Недостающее звено

Мой форум - это JList, который заполнен JPanels и принимает записи через JLists DefaultListModel и метод addMessage. Так что, если я добавляю запись без базы данных выглядит следующим образом:

класс
MessageList m = new MessageList(); 

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

messageList выглядит следующим образом:

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

Хм, я думаю, это должно быть так, но, как ни странно, это не сработает. Я реализовал метод toString в ConBeitrag, как вы описываете, но если я вызываю toString() на объект ConBeitrag, он все равно печатает ConBeitrag @ f5ad7f4. Не следует ли теперь распечатать что-то в формате, указанном в операторе return? Я запускаю System.out.println (a.toString()); где a - объект ConBeitrag, указанный мной с помощью ConBeitrag a = allBtr.get (0) ;. – cflx

+1

Можете ли вы отредактировать свой пост, чтобы показать, как он у вас есть. –

+0

Обновлено, точный синтаксис оператора return еще не реализован. – cflx

Смежные вопросы