您好,我是 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/