嗨,我是 java swing 新手。我必须动态添加按钮,当我尝试动态添加这些按钮时,当它处于自由布局时它不会添加到面板中。它接受任何一种布局,如 null 布局或 gridbaglayout。
有没有其他方法可以使用自由布局动态添加组件?
嗨,我是 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,以便充分利用这两种布局。