如何设置动态创建的jpanel的高度?

时间:2015-03-25 03:58:31

标签: java swing jpanel grid-layout dimension

我无法使用setPreferredSize函数设置动态创建的JPanel大小。还有其他方法吗?

main_panel.removeAll();
        main_panel.revalidate();
        main_panel.repaint();
        panel = new JPanel[100];
        Login.session = Login.sessionfactory.openSession();
        Login.session.beginTransaction();
        String select_n_p_4 = "select a.triage_id from PC_TRIAGE_MASTER_POJO a";
        org.hibernate.Query query1 = Login.session.createQuery(select_n_p_4);
        List l3 = query1.list();
        Iterator it3 = l3.iterator();
        while (it3.hasNext()) {
            Object a4 = (Object) it3.next();
            int f = (int) a4;
            main_panel.setLayout(new GridLayout(0, 1, 1, 10));
            panel[ind] = new JPanel();
            panel[ind].setPreferredSize(new Dimension(10, 10));
            panel[ind].setBorder(triage_boder);
            count++;
            main_panel.add(panel[ind]);
            main_panel.revalidate();
            main_panel.repaint();
            ind++;
        }

1 个答案:

答案 0 :(得分:0)

您的问题是您正在使用的布局管理器。 GridLayout根据父组件的大小创建统一网格,并手动将组件装入每个单元格。您的代码似乎建议您为l3中的每个元素创建一个10 x 10 JPanel,每个元素一个在另一个上面,以10像素分隔。这是使用BoxLayout在您的程序环境中的一种可能方法,它使用了各个组件的大小:

Dimension dim = new Dimension(10, 10);
main_panel.setLayout(new BoxLayout(main_panel, BoxLayout.PAGE_AXIS));
for (Iterator it3 = l3.iterator; it3.hasNext(); ) {
    panel[ind] = new JPanel();
    panel[ind].setPreferredSize(dim);
    panel[ind].setMaximumSize(dim);
    main_panel.add(panel);
    main_panel.add(Box.createRigidArea(dim));
    count++;
    ind++;
}
// you probably don't need this call
main_panel.revalidate();

在大多数情况下,您应该只设置一次组件的布局,而不是每次添加组件时。使用revalidate / repaint,您只需要调用这些方法if you add/remove components at runtime。祝你好运!