Java - JList 中的 JTextArea 不显示所需的文本

Java - JTextArea into JList does not show the wanted text

好的,这就是交易,我正在尝试使用包含字符串值的 JtextArea 填充 JList 的行,但是当我 运行 我的程序时,JList 的行中显示的所有内容都是 JTextArea 的properties(?) 而不是我传递的字符串。那么,你能看看我的代码并指出我遗漏了什么吗?

代码如下:

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

这是我得到的输出:

JList 的默认渲染器仅显示您添加到模型的对象的 toString() 实现。

不要将 JTextArea 添加到 ListModel。将 String 添加到 ListModel

此外,当您只需要一列数据时,为什么要使用 "select * from Teams"。更明确地表达您的 SQL 并提高查询效率。

编辑:

Because the string I am trying to display has multiple lines.

然后您需要创建自定义渲染器并使用 JTextArea 作为渲染器。在任何情况下,您只会将字符串文本添加到 ListModel。阅读 Writing a Custom Renderer 上的 Swing 教程部分。

或者第二个选项是将文本显示为 HTML。 JLabel 将在多行中呈现 HTML:

listModel.addElement("<html>1<br>2<br>3<br></html>");

我相信您为此目的需要 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 图片。
抱歉,由于信誉不佳,我无法发表评论。