Java - JTextArea到JList中不显示想要的文本

时间:2015-01-06 22:03:31

标签: java swing jtextarea jlist

好的伙伴们就是这笔交易,我试图使用包含字符串值的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( ) );
        }
}

这是我得到的输出:

enter image description here

2 个答案:

答案 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 对不起,由于声誉不佳,我无法发表评论。