好的伙伴们就是这笔交易,我试图使用包含字符串值的JtextArea来填充JList的行,但是当我运行我的程序时,JList行中显示的所有内容都是JTextArea的属性(?)而不是我传递的字符串。那么,请你看一下我的代码并指出我错过了什么?
以下是代码:
public void DoConnect() {
try{
String host="jdbc:derby://localhost:1527/Project";
String username="Adminn";
String pass="password";
Connection con = DriverManager.getConnection( host, username, pass );
System.out.println("connected");
Statement stmt = con.createStatement( );
String SQL = "SELECT * FROM TEAMS";
ResultSet rs=stmt.executeQuery(SQL);
while(rs.next()){
String s = rs.getString("NAME");
JTextArea ta = new JTextArea();
ta.setText(s);
listModel.addElement(ta);
}
jList1.setModel(listModel);
jButton1.addActionListener ((ActionEvent e) -> {
listModel.removeAllElements();
DoConnect();
});
}
catch ( SQLException err ){
System.out.println( err.getMessage( ) );
}
}
这是我得到的输出:
答案 0 :(得分:1)
JList的默认渲染器只显示您添加到模型的对象的toString()
实现。
不要将JTextArea添加到ListModel。将String
添加到ListModel
另外,当您只需要一列数据时,为什么要使用“select * from Teams”。更明确地使用SQL并提高查询效率。
编辑:
因为我试图显示的字符串有多行。
然后,您需要创建自定义渲染器并使用JTextArea作为渲染器。在任何情况下,您只需将String文本添加到ListModel。阅读Writing a Custom Renderer上的Swing教程中的部分。
或者第二个选项是将文本显示为HTML。 JLabel将以多行呈现HTML:
listModel.addElement("<html>1<br>2<br>3<br></html>");
答案 1 :(得分:1)
我认为你需要JTable而不是JTextArea,如果我错了,请纠正我
例如,check this image
如果您想使用JTable解决方案,那么有一个名为rs2xml.jar
的库可以让您的生活更轻松地使用您想要的数据填充JTable。
用法:
Statement stmt = con.createStatement();
String SQL = "SELECT * FROM TEAMS";
ResultSet rs = stmt.executeQuery(SQL);
table.setModel(DbUtils.resultSetToTableModel(rs)); //this line requires the rs2xml.jar
对图片的信任:http://learnerarena.com 对不起,由于声誉不佳,我无法发表评论。