使用数组在多个jLabel中设置结果

时间:2017-10-30 15:54:21

标签: java sql-server

如何使用数据库列中的结果集创建多个jLabel? 我花了差不多2天试图解决,但不幸的是我仍然没有把它弄清楚。请帮帮我。

这是我的代码:

String[] arr = null;
    try{
        String sql = "SELECT * FROM Position";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()){
            String s1 = rs.getString("PositionName");
            arr = s1.split("\n");
            int v = 50;
            for (int i = 0; i < arr.length; i++){
               JLabel[] labels = new JLabel[i];
               labels[i] = new JLabel();
               labels[i].setBounds(50,v,80,20);
               labels[i].setText(arr[i]);
                jPanel3.add(labels[i]);
                v+=40;
              System.out.println(arr[i]);
           }
             jPanel3.repaint(); 
        }

我想要一个像这样的结果,(在jLabel中)

President

Vice-President

Secretary

如果我使int i = 0,则输出为&#34; java.lang.ArrayIndexOutOfBoundsException:0&#34; 如果我把它变成int i = 1,那就没有错误但是根本没有创建jLabel。

3 个答案:

答案 0 :(得分:0)

在for-loop之外初始化JLabel数组

 JLabel[] labels = new JLabel[arr.length];
    for (int i = 0; i < arr.length; i++){                   
                   labels[i] = new JLabel();
                   labels[i].setBounds(50,v,80,20);
                   labels[i].setText(arr[i]);
                    jPanel3.add(labels[i]);
                    v+=40;
        }

答案 1 :(得分:0)

i == 0时,

JLabel [] labels = new JLabel [i];

创建一个无法保存任何内容的数组,因为它的大小为0.那么

labels[i] = new JLabel();

尝试将元素设置为索引0,从而导致异常。

代码试图做太多,这使得很难找到错误。尝试将代码分成单一责任方法,例如:

List<String> getAvailablePositions() {
   // get the positions from the database
}

void addPositionLabels(List<String> availablePositions) {
   // add the positions to the JPanel
}

答案 2 :(得分:0)

**这里是示例代码**

JFrame frame = new JFrame();
            frame.setSize(300,300);
            JPanel panel = new JPanel();
            panel.setLayout(null);
            int v = 50;
            JLabel[] labels = new JLabel[3];
            for (int i = 0; i < 3; i++){
                labels[i] = new JLabel();
                labels[i].setBounds(50,v,80,20);
                labels[i].setText("hi");
                panel.add(labels[i]);
                v+=40;
            }
            frame.add(panel);
            frame.setVisible(true);

**您将获得以下结果

     hi

     hi

     hi**