JScrollPane无法正确填充内容

时间:2016-04-02 07:42:54

标签: java swing jscrollpane

我正在使用Netbeans Design来设计用户界面 我在JScrollPane result_container中有一个JPanel jsp_result来显示搜索结果。
这是我使用循环显示搜索结果的方式:

public void displayResult(boolean isEmpty)
{
    int count = al_isbn.size();
    JButton[] btn_detail = new JButton[count];
    JLabel[] lbl_num = new JLabel[count];
    JLabel[] lbl_isbn = new JLabel[count];
    JLabel[] lbl_book_name = new JLabel[count];
    JLabel[] lbl_availability = new JLabel[count];
    JLabel lbl_head_num = new JLabel("No.");
    JLabel lbl_head_isbn = new JLabel("ISBN");
    JLabel lbl_head_name = new JLabel("Book Name");
    JLabel lbl_head_availability = new JLabel("Availability");

    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    Dimension size;
    gbc.insets = new Insets(5, 5, 5, 5);
    gbc.anchor = GridBagConstraints.NORTHWEST;
    result_container.setLayout(gbl);
    result_container.removeAll();
    result_container.removeAll();
    frmSize = this.getPreferredSize();
    size = result_container.getPreferredSize();
    Insets insets = this.getInsets();

    if(isEmpty)
    {
        jsp_result.remove(result_container);
    }
    else
    {
        if(count > 0)
        {
            /**********set empty spacing**********/
            JPanel pane_isbn = new JPanel(new FlowLayout());
            pane_isbn.setPreferredSize(new Dimension(100, pane_isbn.getHeight()));
            JPanel pane_name = new JPanel(new FlowLayout());
            pane_name.setPreferredSize(new Dimension(300, pane_name.getHeight()));
            JPanel pane_category = new JPanel(new FlowLayout());
            pane_category.setPreferredSize(new Dimension(150, pane_category.getHeight()));
            JPanel pane_btn = new JPanel(new FlowLayout());
            pane_btn.setPreferredSize(new Dimension(100, pane_btn.getHeight()));
            gbc.gridx = 0;
            gbc.gridy = 0;
            //gbl.setConstraints(lbl_head_num, gbc);
            //result_container.add(lbl_head_num);
            gbc.gridx = 1;
            gbl.setConstraints(pane_isbn, gbc);
            result_container.add(pane_isbn);
            gbc.gridx = 2;
            gbl.setConstraints(pane_name, gbc);
            result_container.add(pane_name);
            gbc.gridx = 4;
            gbl.setConstraints(pane_btn, gbc);
            result_container.add(pane_btn);

            /**********set heading**********/
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbl.setConstraints(lbl_head_num, gbc);
            result_container.add(lbl_head_num);
            gbc.gridx = 1;
            gbl.setConstraints(lbl_head_isbn, gbc);
            result_container.add(lbl_head_isbn);
            gbc.gridx = 2;
            gbl.setConstraints(lbl_head_name, gbc);
            result_container.add(lbl_head_name);
            gbc.gridx = 3;
            gbl.setConstraints(lbl_head_availability, gbc);
            result_container.add(lbl_head_availability);

            //display result row by row in gridbaglayout
            for(int i = 0; i < count; ++i)
            {   
                lbl_num[i] = new JLabel(i+1 + ". ");
                lbl_isbn[i] = new JLabel(al_isbn.get(i));
                lbl_book_name[i] = new JLabel(al_book_name.get(i));
                lbl_availability[i] = new JLabel(al_availability.get(i).equals("TRUE") ? "Yes":"No");
                btn_detail[i] = new JButton("Detail");
                btn_detail[i].addActionListener(this);
                btn_detail[i].setName(al_isbn.get(i));

                gbc.gridx = 0;
                gbc.gridy = i+2;
                gbc.anchor = GridBagConstraints.NORTHEAST;
                gbl.setConstraints(lbl_num[i], gbc);
                result_container.add(lbl_num[i]);
                gbc.gridx = 1;
                gbc.anchor = GridBagConstraints.NORTHWEST;
                gbl.setConstraints(lbl_isbn[i], gbc);
                result_container.add(lbl_isbn[i]);
                gbc.gridx = 2;
                gbl.setConstraints(lbl_book_name[i], gbc);
                result_container.add(lbl_book_name[i]);
                gbc.gridx = 3;
                gbc.anchor = GridBagConstraints.CENTER;
                gbl.setConstraints(lbl_availability[i], gbc);
                result_container.add(lbl_availability[i]);
                gbc.gridx = 4;
                gbl.setConstraints(btn_detail[i], gbc);
                result_container.add(btn_detail[i]);

                if(action.equals("D"))      //the action is delete and it is performed by admin
                {
                    //declare delete button
                    JButton[] btn_delete = new JButton[count];
                    btn_delete[i] = new JButton("Delete");
                    btn_delete[i].addActionListener(this);
                    btn_delete[i].setName(al_isbn.get(i));

                    //add delete button
                    gbc.gridx = 5;
                    gbl.setConstraints(btn_delete[i], gbc);
                    result_container.add(btn_delete[i]);
                }
                else if(action.equals("E"))
                {
                    //declare edit button
                    JButton[] btn_edit = new JButton[count];
                    btn_edit[i] = new JButton("Edit");
                    btn_edit[i].addActionListener(this);
                    btn_edit[i].setName(al_isbn.get(i));

                    //add edit button
                    gbc.gridx = 5;
                    gbl.setConstraints(btn_edit[i], gbc);
                    result_container.add(btn_edit[i]);
                }
            }
        }
        else
        {
            result_container.add(new JLabel("No result found."));
        }
    }
    this.revalidate();
    this.repaint();
}

这就是界面的外观: enter image description here

我已将滚动条滚动到最后,但无论我有多少记录,它总是无法完全显示最后一行。
这是我的面板尺寸:
这个(主JFrame):this.setPreferredSize(new Dimension(750, 250));
JScrollPane jsp_resultjsp_result.setPreferredSize(new Dimension(700, 200));
JPanel result_containerresult_container.setPreferredSize(new Dimension(700, 200));

0 个答案:

没有答案