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

Java:如何将数组放入JScrollPane();?,java,Java,在这里,我使用数据库连接并尝试从数据库检索所有表名。稍后您可以看到,我得到的表名(使用while循环)存储在String[]表中,然后我将此字符串添加到我的 List<String []> sqltable = new ArrayList<>(); 所以我的问题是如何使用这个for循环(或者如果有人知道更好的方法,可能不使用for循环)将这个sqltable列表放入我的listScrollPane JScrollPane listScrollPane = new JSc

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

List<String []> sqltable = new ArrayList<>();
所以我的问题是如何使用这个for循环(或者如果有人知道更好的方法,可能不使用for循环)将这个sqltable列表放入我的listScrollPane

JScrollPane listScrollPane = new JScrollPane();  
我已经尝试过(但这不起作用,因为我无法从while循环中接触varibales):

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

我的代码:

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));                         
     }
}       
if(conn!=null){
DatabaseMetaData=conn.getMetaData();
List sqltable=new ArrayList();
试试{
字符串[]类型={“表”};
字符串[]表;
ResultSet ResultSet=metadata.getTables(null,null,“%”,类型);
while(resultSet.next()){
tableName=resultSet.getString(3);
tables=新字符串[]{tableName};
添加(表);
}
}catch(SQLException-ex){
Logger.getLogger(JFDatabase.class.getName()).log(Level.SEVERE,null,ex);
}
for(字符串[]表名:sqltable){
System.out.println(Arrays.toString(tablename));
System.out.println(Arrays.asList(tablename));
}
}       

嗯,我不确定我是否理解你的代码。。。您有一个数组列表。。。这是你想要的吗

无论如何,我建议您看看这个简短的示例,它将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);
    }

}
import java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JScrollPane;
公共类TestJScrollPaneWithList{
公共静态void main(字符串[]args){
List sqlTable=new ArrayList();
add(新字符串[]{“test1”});
add(新字符串[]{“test2”});
add(新字符串[]{“test3”});
JFrame fr=新JFrame(“测试”);
JList list=newjlist(sqlTable.toArray());
setCellRenderer(新的ListCellRenderer(){
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、布尔isSelected、布尔cellHasFocus){
字符串[]val=(字符串[])值;
返回新的JLabel(val[0]);
}
});
JScrollPane listScrollPane=新的JScrollPane(列表);
fr.add(列表滚动窗格);
fr.setSize(100100);
fr.setVisible(真);
}
}

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

JScrollPane只提供了一个可以滚动的窗格。您需要在其中添加一些内容,以便将列表放入其中。例如表格或列表框等。。。。顺便问一下,为什么你要在ArrayList中使用字符串数组?好的,我可以使用ArrayList a=new ArrayList,但这不是问题,在这两种情况下都可以,对于JScrollPane,是的,我知道我需要输入一些数据,但我不是要求这样做,我要求的是正确的方法。我明白你的观点,你的示例很清楚,一切都很好。但从另一方面来说,你们在你们的主类中完成了所有这些,所以很容易得到列表,但在我的例子中,每个变量都在if和while循环中,所以我不能像你们在例子中那样到达它们是的,我想提供一个非常简短和基本的例子:-)。我想您可以使用它,因为我读到“我已经尝试过:JScrollPane listcrollpane=newjscrollpane(Arrays.asList(sqltable));”所以我想您可以尝试JScrollPane listcrollpane=newjscrollpane(new JList(sqltable.toArray());同样的方法。在某种程度上,我应该感谢你们,你们让这个列表很好用:)。但还有另一个问题,因为它打印的不是字符串而是数组对象名:Ljava.lang.String@264d8046,也许您知道如何将其转换为字符串:)刚刚在我的编辑中添加了一个基本的ListCellRenderer示例。ty:)u是最好的:)
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));                         
     }
}       
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);
    }

}