Java:如何将数组放入JScrollPane();?

时间:2016-04-06 15:07:13

标签: java

这里我使用数据库连接并尝试从数据库中检索所有表名。稍后您可以看到我得到的那些表名(使用while循环)存储在String []表中,然后我将此字符串添加到我的

List<String []> sqltable = new ArrayList<>();

为了打印它们我正在使用for循环:

for (String [] tablename : sqltable)

所以我的问题是如何将这个用于循环(或者如果有人知道更好的方法可能不用于循环)将这个sqltable列表放入我的listScrollPane中?

JScrollPane listScrollPane = new JScrollPane();  

我已经尝试过了(但这不起作用,因为我的while循环无法达到varibales):

JScrollPane listScrollPane = new JScrollPane(Arrays.asList(sqltable)); 

还尝试在其中创建循环的方法和存储,但通过这样做我只实现了null。

我的代码snipet:

if (conn != null) {
     DatabaseMetaData metadata = conn.getMetaData();
     List<String []> sqltable = new ArrayList<>();
     try {                             
         String[] types = {"TABLE"};
         String[] tables;                             
         ResultSet resultSet = metadata.getTables(null, null, "%", types);
         while (resultSet.next()) {
             tableName = resultSet.getString(3);
             tables = new String[]{tableName};
             sqltable.add(tables);                                 
         }
     } catch (SQLException ex) {  
         Logger.getLogger(JFDatabase.class.getName()).log(Level.SEVERE, null, ex);
     }
     for (String [] tablename : sqltable){
         System.out.println(Arrays.toString(tablename));
         System.out.println(Arrays.asList(tablename));                         
     }
}       

1 个答案:

答案 0 :(得分:0)

好吧,我不确定我理解你的代码......你有一个数组列表......这就是你想要的吗?

无论如何,我建议你看看这个简短的例子,将JList包装在JScrollPane中。

import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class TestJScrollPaneWithList {

    public static void main(String[] args) {
        List<String[]> sqlTable = new ArrayList<String[]>();

        sqlTable.add(new String[] { "test1" });
        sqlTable.add(new String[] { "test2" });
        sqlTable.add(new String[] { "test3" });

        JFrame fr = new JFrame("Test)");

        JList list = new JList(sqlTable.toArray());
        list.setCellRenderer(new ListCellRenderer() {

            @Override
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                String[] val = (String[]) value;
                return new JLabel(val[0]);
            }
        });
        JScrollPane listScrollPane = new JScrollPane(list);

        fr.add(listScrollPane);

        fr.setSize(100, 100);
        fr.setVisible(true);
    }

}

我添加了一个基本的ListCellRenderer,它在一个JLabel中显示每个数组的第一个元素,而不是默认数组的toString。