本教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不建议使用的选项的信息,请参阅JDK发行说明。
在以下每个问题中,选择最适合描述布局的布局管理器。假设由布局管理器控制的容器是一个JPanel
。
问题1。容器中有一个组件应尽可能占据尽可能多的空间。
![]() |
![]() |
a. BorderLayout
b. GridLayout
c. GridBagLayout
d. a 和 b
e. b 和 c
答案1:d. BorderLayout
和 GridLayout
最适合处理这种情况。尽管可以使用GridBagLayout
,但它比必要复杂得多。
问题2。容器中有一行组件,应全部以相同的大小显示,填充容器的整个区域。
a. FlowLayout
b. GridLayout
c. BoxLayout
d. a 和 b
答案2:b. GridLayout
是最擅长处理这种相同大小的布局,无论是在一行、一列还是一个网格中。
问题3。容器以列的方式显示多个组件,任何额外的空间都在第一个和第二个组件之间。
![]() |
![]() |
a. FlowLayout
b. BoxLayout
c. GridLayout
d. BorderLayout
答案3:b. BoxLayout
可以以列或行的方式布局组件。您可以使用一个不可见组件来指定额外的空间。
问题4。容器可以在不同的时间显示三个完全不同的组件,这取决于用户输入或程序状态。即使组件的大小不同,从一个组件切换到另一个组件也不应改变分配给组件的空间量。
a. SpringLayout
b. BoxLayout
c. CardLayout
d. GridBagLayout
答案4: c. CardLayout
存在的目的是允许组件共享同一空间。虽然使用 JTabbedPane
组件来控制一个区域更简单,但当你不想使用选项卡时,CardLayout
是解决方案。
练习题1. 实现题目1中描述的布局并展示。
答案1: 查看 Layout1.java
。下面是实现该布局的代码:
JPanel p = new JPanel(new BorderLayout()); p.add(createComponent("组件1"), BorderLayout.CENTER); frame.setContentPane(p);
练习题2. 实现题目2中描述的布局并展示。
答案2: 查看 Layout2.java
。下面是实现该布局的代码:
JPanel p = new JPanel(new GridLayout(1,0)); p.add(createComponent("组件1")); p.add(createComponent("组件2")); p.add(createComponent("组件3")); p.add(createComponent("组件4")); frame.setContentPane(p);
练习题3. 实现题目3中描述的布局并展示。
答案3: 查看 Layout3.java
。下面是实现该布局的代码:
JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS)); p.add(createComponent("组件1")); p.add(Box.createVerticalGlue()); p.add(createComponent("组件2")); p.add(createComponent("组件3")); p.add(createComponent("组件4")); frame.setContentPane(p);
练习题4. 实现题目4中描述的布局并展示。
答案4: 查看 Layout4.java
。下面是实现该布局的代码:
...//设置单选按钮的部分: for (int i= 0; i < strings.length; i++) { ... rb[i].setActionCommand(String.valueOf(i)); ... } ...//设置包含共享空间组件的面板部分: cards = new JPanel(new CardLayout()); for (int i = 0; i < strings.length; i++) { cards.add(createComponent(strings[i]), String.valueOf(i)); } ...//单选按钮的动作监听器部分: public void actionPerformed(ActionEvent evt) { CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, (String)evt.getActionCommand()); }
练习5。通过添加一行代码,使你在练习2中编写的程序从左到右显示组件变为从右到左显示。
答案5:你可以使用Component
类定义的setComponentOrientation
方法来更改水平方向的布局方向。例如:
p.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);