Java 通过JDBC获取JList中的数据-缺少的链接
我被一个看似简单的问题困扰了好几个小时,我就是找不到解决办法。我正在尝试用Java实现一个非常简单的论坛,目前我正在尝试加载入口 我的论坛是一个JList,它充满了JPanel,并通过JListsJava 通过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
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;
}
}