如何从容器中删除任何组件时重用容器中的区域?

时间:2010-04-01 17:55:14

标签: java swing

我有一个面板,我试图从运行时添加到它的标签中删除它。 但是当标签被成功移除时,我无法使用该标签留下的空格,再次向其添加任何标签。

感谢期待解决方案。

这是相关的代码段:

  1. 向面板添加标签:

    JLabel jl = new JLabel();
    jl.setOpaque(true);
    jl.setIcon(new ImageIcon("D:/Project/router2.jpg"));
    jl.setBounds(x, y, jl.getPreferredSize().width,
        jl.getPreferredSize().height);
    for (Component c : lcomponent) {
        flag = true;
        Rectangle r4 = c.getBounds();
        int x1 = (int) r4.getX();
        int y1 = (int) r4.getY();
        Rectangle r5 = new Rectangle(
            new Point(x1 - 60, y1 - 60), new Dimension(170, 170));
        if (r5.contains(p)) { //To ensure that two labels do not overlap
            flag = false;     //or are too close to each other
            break;
        }
    }
    if (flag) {
        p2.add(jl); //p2 is a panel
        Component c2 = p2.getComponentAt(x, y);
        p2.repaint();
        lcomponent.add(c2); //lcomponent is an ArrayList<Component> to
                            //store all the labels added to the panel
    }
    
  2. 删除标签:

    p2.remove(<label name>);
    p2.repaint();
    
  3. 我还尝试了revalidate(),但我不知道为什么它会自动对齐组件 在顶部一排。

    也帮助我

3 个答案:

答案 0 :(得分:3)

调用Container.invalidate()

答案 1 :(得分:1)

在可见框架中添加/删除组件后,您应该使用:

//panel.add(...);
panel.remove(...);
panel.revalidate();
panel.repaint();

答案 2 :(得分:0)

我想我得到了答案。实际上在移除组件时,我将其从面板中移除但不是从arraylists(上面的组件和标签)中移除,因为我无法再使用该区域来放置任何其他component.removing列表中的条目为我工作。