如何最简单地创建一个占据其父容器固定百分比宽度的JPanel
?
当其父容器宽度变化时,该面板的宽度应随之更新。
我尝试使用 Box.createHorizontalStrut()
,但该方法并不会在JPanel
的父容器宽度变化时自动更新。
如何最简单地创建一个占据其父容器固定百分比宽度的JPanel
?
当其父容器宽度变化时,该面板的宽度应随之更新。
我尝试使用 Box.createHorizontalStrut()
,但该方法并不会在JPanel
的父容器宽度变化时自动更新。
weightx
,它完全按照其字面意思执行。这是在该“网格行”中计算所有组件的相对值,类似于分配部分。weightx = 0.5
。确保该行的weightx值总和为1.0
。SpringLayout
:import java.awt.*;
import javax.swing.*;
public class SpringLayoutTest {
private JComponent makeUI() {
SpringLayout layout = new SpringLayout();
JPanel p = new JPanel(layout);
p.setBorder(BorderFactory.createLineBorder(Color.GREEN, 10));
Spring pw = layout.getConstraint(SpringLayout.WIDTH, p);
Spring ph = layout.getConstraint(SpringLayout.HEIGHT, p);
JLabel l = new JLabel("label: 5%, 5%, 90%, 55%", SwingConstants.CENTER);
l.setOpaque(true);
l.setBackground(Color.ORANGE);
l.setBorder(BorderFactory.createLineBorder(Color.RED, 1));
JButton b = new JButton("button: 50%, 65%, 40%, 30%");
setPercentage(layout.getConstraints(l), pw, ph, .05f, .05f, .90f, .55f);
setPercentage(layout.getConstraints(b), pw, ph, .50f, .65f, .40f, .30f);
p.add(l);
p.add(b);
return p;
}
private static void setPercentage(
SpringLayout.Constraints c, Spring pw, Spring ph,
float sx, float sy, float sw, float sh) {
c.setX(Spring.scale(pw, sx));
c.setY(Spring.scale(ph, sy));
c.setWidth(Spring.scale(pw, sw));
c.setHeight(Spring.scale(ph, sh));
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new SpringLayoutTest().makeUI());
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
RelativeLayout rl = new RelativeLayout(RelativeLayout.X_AXIS);
rl.setFill( true );
JPanel panel = new JPanel( rl );
panel.add(red, new Float(25);
panel.add(green, new Float(25));
panel.add(blue, new Float(50));