Java 通过JDBC获取JList中的数据-缺少的链接

Java 通过JDBC获取JList中的数据-缺少的链接,java,swing,jdbc,arraylist,jlist,Java,Swing,Jdbc,Arraylist,Jlist,我被一个看似简单的问题困扰了好几个小时,我就是找不到解决办法。我正在尝试用Java实现一个非常简单的论坛,目前我正在尝试加载入口 我的论坛是一个JList,它充满了JPanel,并通过JListsDefaultListModel和addMessage方法接受条目。因此,如果我添加一个没有数据库的条目,它看起来如下所示: MessageList m = new MessageList(); m.addMessage("NAME AUTOR", "<html><body sty

我被一个看似简单的问题困扰了好几个小时,我就是找不到解决办法。我正在尝试用Java实现一个非常简单的论坛,目前我正在尝试加载入口

我的论坛是一个JList,它充满了JPanel,并通过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");
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));
     }

}
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;

    }
}
我还编写了从数据库获取带有消息对象(称为ConBeitrag)的ArrayList(称为allBtr)的代码:

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

ConBeitrag conBtr = new ConBeitrag();

try {
    allBtr = conBtr.getAllBtr();
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
“如果有帮助,消息将作为对象存储在ArrayList中。因此,如果我运行”System.out.println(allBtr);“它给了我”[ConBeitrag@48f4104f, ConBeitrag@f5ad7f4, ConBeitrag@1517dc0c]"

您需要重写
ConGeitrag
类中的
toString
方法

    public class ConBeitrag {      
         ...

         @Override
         public String toString(){
              return author + ", " + text + ", " + date + ", " + tag; 
         }
    }
您可以使
返回
任何您想要的格式。测试此格式并根据需要对格式进行更改

作为助手方法尝试一下(在您重写toString之后)

我认为在这种情况下不需要定制JList

测试运行:输出:
3testnullnull
。除了格式设置之外,它还可以正常工作

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;
    }

}

ConBeitrag
“Message”是其他语言吗?是的,一些术语是德语。“ConBeitrag”或多或少是“ConMessage”。当您尝试和
addMessage()
?addMessage()时会发生什么正如在第一个代码段中使用的一样,它工作正常。但是我想使用存储在ArrayList中的ConBeitrag对象来添加消息。我的问题是我不知道如何将ArrayList传递给addMessage()方法。或者我需要采取什么步骤来实现这一点。看看我的答案,看看这是否有帮助。让我知道。如果没有,我将提供另一种可能的解决方案。嗯,我认为应该是这样,但奇怪的是,它不起作用。我在ConBeitrag中实现了方法toString,就像你描述的那样,但如果我调用toString()在ConBeitrag对象上,它仍然打印ConBeitrag@f5ad7f4.它现在是否应该以我们在return语句中指定的格式打印出一些内容?我运行System.out.println(a.toString());其中a是我用ConBeitrag a=allBtr.get(0)指定的ConBeitrag对象;更新了它,返回语句的确切语法当然还没有实现。嗯,在你的例子中你在哪里使用toString?我看到你在实现它,但没有调用它?或者当你使用println时它会自动调用吗?你不需要调用它。这就是它的魔力。它会自动以toString格式打印出来哦,伙计,你是绝对正确(再次)。我将该方法放置在错误版本的ConBeitrag类中。是时候清理我的Eclipse工作区了……非常感谢您的帮助!
    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; 
    }
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;
    }

}