2012-04-30 84 views
0

我想存储像JButton,JTextField,JTextArea等所有组件在同一个ArrayList中,然后循环它并将每个组件添加到JFrame中。我尝试将它们存储在ArrayList中,但是当我通过它并将其包含到框架中的每个组件添加到框架中时,没有任何框架出现。有谁知道这可以做到吗?提前致谢。在ArrayList中存储组件

+1

你能亲切地发布您的代码? – ControlAltDel

+0

为了尽快提供更好的帮助,请发布[SSCCE](http://www.sscce.org)。 – wchargin

+0

扩展您的问题,我想知道是否有一种方法可以将所有JComponents“一次”添加到使用列表的JFrame中。可能吗?如果是的话,它会比一个一个的放置更快吗?我知道我们可能正在谈论几百毫秒组件的毫秒数。要求更多的好奇心。 – geo

回答

1

尝试宣告ArrayList这样的:

List<JComponent> = new ArrayList<JComponent>(); 

上述工作,因为JComponentJButtonJTextFieldJTextArea一个共同的祖先 - 也就是说,它是常见的所有JComponent上一个超类。

我不清楚:为什么要先将组件添加到ArrayList?直接将它们添加到JFrame

1

继续用这样的:

public class Example { 

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 

    List<Component> components = new ArrayList<Component>(); 

    components.add(new JButton("test1")); 
    components.add(new JButton("test3")); 
    components.add(new JButton("test3")); 

    frame.setLayout(new FlowLayout()); 

    for(Component component: components) 
     frame.getContentPane().add(component); 

    frame.pack(); 
    frame.setVisible(true); 
} 
} 
  • 添加布局管理你的框架
  • 呼叫pack()来调整框架根据你的组件
  • 设置帧可见
+1

对于这个问题的海报只是一个额外的评论:这项工作得益于'FlowLayout',它支持动态数量的组件,并且您可以添加组件而无需指定约束条件,它们都将显示出来。对于其他布局管理者来说,它可能并不那么简单。 – Robin

1

你知道如何使用布局管理器吗?

布局管理器是一个对象,它实现了LayoutManager接口*并确定容器中组件的大小和位置。虽然组件可以提供大小和对齐方式提示,但容器的布局管理器对容器内组件的大小和位置有最终的说法。

Using Layout Managers

+0

不幸的是,我不知道,但它是我努力学习的东西,迄今没有成功。我已经尝试过数百万次,但从来没有组件去我想要他们去的地方。 –

+0

如果您需要一个gui构建器,您可以尝试使用NetBeans: [NetBeans功能 - Swing GUI Builder](http://netbeans.org/features/java/swing.html) – ceklock

+0

我已经在使用NetBeans,但我认为它生成的代码太复杂了,我还不明白。 –