【问题标题】:Array not showing in Jlist but filled in console数组未显示在 Jlist 中但已填充到控制台
【发布时间】:2010-04-23 17:11:27
【问题描述】:

你好。今天一直忙于调试。 生病给这个简短的版本。

我创建了一个从数据库中获取名称的数组列表。 然后我将arraylist的内容放入一个字符串数组中。 现在我也想在 JList 中显示数组内容。

奇怪的是它更早地工作了。我有两种方法。那些也只是一点点练习,确保我正确地添加到 Jlist 中。这是关键代码。

这是我的代码布局。

变量 构造函数 方法

在我的变量中,我定义了这 3 个

String[] contactListNames = new String[5];
ArrayList<String> rowNames = new ArrayList<String>();
JList contactList = new JList(contactListNames);

足够简单。

在我的构造函数中,我再次拥有它们。

contactListNames = new String[5];
    contactList = new JList(contactListNames);
//i dont have the array list defined though.

 printSqlDetails();
// the prinSqldetails was too make sure that the connectionw as alright. and its working fine.

     fillContactList();
 // this is the one thats causing me grief. its where all the work happens.

   // fillContactListTest();
// this was the tester that makes sure its adding to the list alright.

这是 fillContactListTest() 的代码

  public void fillContactListTest()
 {
  for(int i = 0;i<3;i++)
  {
   try
   {
    String contact;
    System.out.println(" please fill the list at index "+ i);
    Scanner in = new Scanner(System.in);
    contact = in.next();
    contactListNames[i] = contact;
    in.nextLine();
   }
   catch(Exception e)
   {
 e.printStackTrace();   
   }
  }
 }

这是应该也可以工作的主要方法。

public void fillContactList()
       {
           int i =0;
           createConnection();
           ArrayList<String> rowNames = new ArrayList<String>();
           try
           {
               Statement stmt = conn.createStatement();
               ResultSet namesList = stmt.executeQuery("SELECT name FROM Users");
               try
               {

                   while (namesList.next())
                   {
                       rowNames.add(namesList.getString(1));

                       contactListNames =(String[])rowNames.toArray(new String[rowNames.size()]);

                       // this used to print out contents of array list
                      // System.out.println("" + rowNames);

                       while(i<contactListNames.length)
                       {
                           System.out.println(" " + contactListNames[i]);
                           i++;
                       }
                   }
               }
               catch(SQLException q)
               {
                   q.printStackTrace();
               }
               conn.commit();
               stmt.close();
               conn.close();
           }
           catch(SQLException e)
           {
               e.printStackTrace();
           }
       }

我真的需要帮助。我束手无策。我只是不明白为什么第一种方法会添加到 JList 没问题。但第二个不会。

contactListNames 数组和数组列表都可以正常打印并在其中包含名称。但我也必须将它们转移到错误的 jlist 中。请帮忙

ps 我知道这很长。但相信我,它是简短的版本。

【问题讨论】:

  • nb 当我将 arrayList 直接放入 JList 时,我遇到了同样的问题。还是不显示

标签: java jdbc arrays jlist


【解决方案1】:

你需要打电话

contactList = new JList(contactListNames);

之后

fillContactList();

因为在fillContactList() 内部,您替换 contactListNames 引用而不是填充它。

也就是说并且与所描述的问题无关,代码中有更多的可能性,但我认为你迟早会发现它们:) (代码泄漏了 JDBC 连接,代码流效率低下,代码没有以直观的 OO 方式排列,等等。但是,这与所描述的问题完全无关)。

【讨论】:

  • 那么问题出在其他地方,而不是目前提供的信息。尝试ask your question the smart way 并提供SSCCE(这样我们就可以复制'n'粘贴代码未更改,编译并执行它以查看相同的问题)。也请你的态度,我不确定是不是语言障碍,但你的最后一句话听起来非常粗鲁。我当然很乐意提供帮助,但您必须先帮助我们帮助您。
  • 我很抱歉。现在再读一遍,这对我来说是一个很糟糕的评论。这并不意味着太粗鲁,但无论如何这对我来说是一个大错误。我是java的初学者,但不是礼仪。我真的很感谢您的帮助,并希望您接受我诚挚的歉意。我渴望学习,绝不想显得无礼。 p.s SSCCE 是一个很难研究的话题,我什至想知道它直到现在。生病研究更多一些。谢谢你。
  • 没问题。关于 SSCCE:只需使用 main() 方法创建一个类,该方法在一次运行中演示/重现完全相同的问题并复制粘贴整个源代码。
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 2015-06-30
  • 2019-06-23
  • 2020-07-23
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多