我有一个由按钮 (X)、标签 (Y) 和进度条 (Z) 组成的面板。理想情况下,我想像这样布置它们:
| X-X Y---------------Y Z---Z ============= | <-- expanded-size panel
^ extra space
| X-X Y------Y Z---Z | <-- reduced-size panel
上图显示:
- 当面板展开时,标签 (Y) 应该有额外的空间,以便标签可以完全显示其文本。
- 进度条 (Z) 应始终位于标签 (Y) 旁边。
- 当面板缩小时,标签 (Y) 的尺寸应缩小。
- 按钮 (X) 和进度条 (Z) 的大小应该是恒定的,而不是标签 (Y) 的大小。
但是,当我尝试使用 GroupLayout 时,面板展开时会发生这种情况:
| X-X Y---------------Y ============= Z---Z | <-- expanded-size panel (bad)
问题是,当面板有额外空间时,标签 (Y) 会扩展超出所需的范围,这会将进度条 (Z) 推到右侧。我希望进度条的 (Z) 位置在标签 (Y) 旁边。
我怎样才能完成这个布局?
示例代码(“Blah.java”):
import java.awt.*;
import javax.swing.*;
public class Blah extends JPanel {
public Blah() {
final JButton X = new JButton("X");
final JLabel Y = new JLabel("yyyyyyyyyyy");
Y.setOpaque(true);
Y.setBackground(Color.YELLOW);
final JProgressBar Z = new JProgressBar();
Z.setIndeterminate(true);
final GroupLayout l = new GroupLayout(this);
super.setLayout(l);
l.setHorizontalGroup(
l.createSequentialGroup()
.addComponent(X, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(Y, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Z, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));
l.setVerticalGroup(
l.createParallelGroup()
.addComponent(X)
.addComponent(Y)
.addComponent(Z));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame = new JFrame("Blah");
frame.add(new Blah());
frame.pack();
frame.setVisible(true);
}
});
}
}