我有一个面板,我试图从运行时添加到它的标签中删除它。 但是当标签被成功移除时,我无法使用该标签留下的空格,再次向其添加任何标签。
感谢期待解决方案。
这是相关的代码段:
向面板添加标签:
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
}
删除标签:
p2.remove(<label name>);
p2.repaint();
我还尝试了revalidate(),但我不知道为什么它会自动对齐组件 在顶部一排。
也帮助我
答案 0 :(得分:3)
调用Container.invalidate()
答案 1 :(得分:1)
在可见框架中添加/删除组件后,您应该使用:
//panel.add(...);
panel.remove(...);
panel.revalidate();
panel.repaint();
答案 2 :(得分:0)
我想我得到了答案。实际上在移除组件时,我将其从面板中移除但不是从arraylists(上面的组件和标签)中移除,因为我无法再使用该区域来放置任何其他component.removing列表中的条目为我工作。