重新安排一个JFrame的内容窗格中JPanels?

我已经创建了一个包含使用网格布局(3×3)9 JPanels一个JFrame子类。 我试图设计一个随机重新排列的JFrame内JPanels的方法。 这是我到目前为止有:

public void shuffle() { Stack<Component> panels = new Stack<Component>(); for(Component c : this.getContentPane().getComponents()) panels.push(c); this.getContentPane().removeAll(); Collections.shuffle(panels); while(!panels.isEmpty()) this.getContentPane().add(panels.pop()); this.repaint(); }

这种方法被运行后,JPanels是在网格布局完全相同的位置,因为他们之前! 我已经证实,在JFrame确实越来越粉刷,我的堆栈是越来越洗牌,那removeAll()add()方法的工作。 内容窗格似乎想起那里的JPanels人,所以重新排序add()调用似乎并没有工作。

我在哪里犯了一个错误? 有谁知道一个更好的方法来洗牌布局内JPanels的位置? 提前致谢!

--------------解决方案-------------

也许你的问题是,你需要调用重新验证在容器上添加组件后。 这告诉布局管理器来做好自己的事情 - 布局它们所包含的组件。

((JPanel)getContentPane()).revalidate();
getContentPane().repaint();

我怀疑你的堆栈的使用的问题。 请尝试更改到一个列表来代替。

List<Component> panels = new ArrayList<Component>();
for(Component c : this.getContentPane().getComponents())
panels.add(c);

this.getContentPane().removeAll();
Collections.shuffle(panels);

this.getContentPane().setLayout(new GridLayout(3,3));

for(Component c: panels){
this.getContentPane().add(c);
}

分类:java的 时间:2013-06-09 人气:0
本文关键词: 爪哇,秋千
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.352 (s). 10 q(s)