是否有一个布局管理器可以提供与绝对定位相同程度的控制?但也使自动调整大小成为可能?可以使用相对坐标放置元素的东西?
问问题
3568 次
3 回答
3
GridBagLayout
是 Swing 中最灵活的标准布局管理器,它几乎可以实现你需要的任何东西,尽管远没有你想象的那么简单,只使用相对坐标(我猜你的意思是相对于帧大小的 0-100% )。
GridBagLayout
您可以在这里找到官方文档,其中也有一些数字和示例。
您还可以查看开源MiG Layout,它更方便,GridBagLayout
也更强大。它是所有布局管理器的母亲。
于 2013-05-16T18:43:37.160 回答
3
JDK 中最强大的布局管理器是GridBagLayout
. 然而,典型的 UI 包含面板的组合,每个面板都配置为使用不同的布局。例如,整个窗口的边框布局,包含一组按钮的面板的流式布局,GridLayout
或GridBagLayout
复杂部分的布局。
您还可以查看MigLayout 之类的替代方案- 非常强大的工具,几乎可以创建您可以想象的任何视图。
于 2013-05-16T18:44:45.553 回答
1
另一种选择是使用 SpringLayout(我个人喜欢 GridBagLayout)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import static javax.swing.SpringLayout.*;
public class SpringScaleTest {
public JComponent makeUI() {
SpringLayout layout = new SpringLayout();
JPanel p = new JPanel(layout);
p.setBorder(BorderFactory.createLineBorder(Color.GREEN, 10));
JLabel l1 = new JLabel("label: width=90%", SwingConstants.CENTER);
l1.setBorder(BorderFactory.createLineBorder(Color.RED, 1));
JButton l2 = new JButton("button: width=50%");
Spring panelw = layout.getConstraint(WIDTH, p);
SpringLayout.Constraints c1 = layout.getConstraints(l1);
c1.setX(Spring.constant(0));
c1.setY(Spring.constant(20));
c1.setWidth(Spring.scale(panelw, 0.9f));
p.add(l1);
SpringLayout.Constraints c2 = layout.getConstraints(l2);
c2.setWidth(Spring.scale(panelw, 0.5f));
layout.putConstraint(SOUTH, l2, -20, SOUTH, p);
layout.putConstraint(EAST, l2, -20, EAST, p);
p.add(l2);
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() { createAndShowGUI(); }
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new SpringScaleTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
于 2013-05-17T05:48:17.773 回答