【问题标题】:Store components in ArrayList在 ArrayList 中存储组件
【发布时间】:2012-05-10 11:51:45
【问题描述】:

我想将 JButton、JTextField、JTextArea 等组件存储在同一个 ArrayList 中,然后循环遍历它并将每个组件添加到 JFrame。我尝试将它们存储在 ArrayList 中,但是当我遍历它并将它包含的每个组件添加到我的框架中时,框架中什么都没有显示。有谁知道如何做到这一点?提前致谢。

【问题讨论】:

  • 您能发布您的代码吗?
  • 如需尽快获得更好的帮助,请发帖SSCCE。
  • 扩展您的问题,我想知道是否有一种方法可以使用列表“一次”将所有 JComponents 添加到 JFrame。可能吗?如果是的话,会比一个一个地放置更快吗?我知道我们可能在谈论 100 多个组件的毫秒数。出于好奇而询问更多。

标签: java swing loops arraylist add


【解决方案1】:

尝试像这样声明ArrayList:

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

上述方法有效,因为JComponent 是JButton、JTextField、JTextArea 的共同祖先——也就是说,它是所有 JComponents 共有的超类。

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

【讨论】:

    【解决方案2】:

    继续这个:

    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()根据您的组件调整框架大小
    • 设置框架可见

    【讨论】:

    • 只是对这个问题的海报的额外评论:这要归功于FlowLayout,它支持动态数量的组件,您可以在不指定约束的情况下添加组件,它们都会显示向上。使用其他布局管理器可能没那么简单。
    【解决方案3】:

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

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

    Using Layout Managers

    【讨论】:

    • 不幸的是我没有,但这是我努力学习的东西,到目前为止还没有成功。我已经尝试了百万次,但从来没有让组件去我想让它们去的地方。
    • 如果您需要 gui 构建器,可以尝试 NetBeans:NetBeans features - Swing GUI Builder
    • 我已经在使用 NetBeans,但我认为它生成的代码太复杂了,我还无法理解。
    猜你喜欢
    • 2018-02-15
    • 2016-08-17
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2013-12-19
    • 2016-08-01
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多