java - 如何在swing中自由布局动态添加按钮等组件?

标签 java swing layout jcomponent

您好,我是 Java Swing 的新手。 我必须动态添加按钮,当我尝试动态添加这些按钮时,当它处于自由布局时,它不会添加到面板。它接受任何一种布局,如 null 布局或 gridbaglayout。

有没有其他方法可以自由布局动态添加组件?

最佳答案

我假设“自由布局”指的是自由设计布局,也称为 Netbeans 开发的 GroupLayout。这种布局背后的基本思想是它在交互式设计和使用 GUI 构建器添加具有简单视觉支持的组件时提供的便利。

GUI 生成器生成支持正确放置组件的必要代码。下面是使用自由设计布局在 JPanel 上放置两个 JButton 的自动生成的代码:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jButton1)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 217, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(96, 96, 96))))
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addComponent(jButton1)
        .addGap(100, 100, 100)
        .addComponent(jButton2)
        .addContainerGap(140, Short.MAX_VALUE))
);

如您所见,轻松交互放置的成本会传递到生成的代码中。这使得这种布局不太适合动态组件处理。

另一方面,FlowLayout 或 GridLayout 允许您更好地以编程方式处理动态组件。 您也可以始终将 FlowLayout JPanel 添加到 GroupLayout JPanel,以便充分利用这两种布局。

关于java - 如何在swing中自由布局动态添加按钮等组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444845/

相关文章:

java - 嵌套JSON的POJO格式?

java - 图像未出现

java - 如何在 JTable 中使用 hashMap

java - 为什么设计到iee754

java - 如何在Java中查找两条线段是否相交?

java - 寻找适合此应用程序的 GUI 设计模式

Android ViewFlipper + 手势检测器

javascript - 在没有 iframe 的情况下,如何从正常的样式和 css 规则流中删除部分网页?

c# - 如果我要在类似网格的布局中放置 60 张(将来会更多)图像,我应该使用什么布局?

java - CDI 会(或应该)提供包限定符吗?