GridBagLayout布局管理器—实现左右选择框Java认证考试
文章作者 100test 发表时间 2009:04:10 01:55:40
来源 100Test.Com百考试题网
百考试题编辑整理:使用Swing快2年了,一直没有深入研究Swing中著名的布局管理器GridBagLayout,说他著名是因为他布局灵活,可以适用各种 复杂的布局要求,当然也因为他是著名的复杂,这次由于过几天一次重要的面试,“迫使”我不得不好好研究一下(哈哈,其前太懒了,以后一定多注意。
先来分享一下我的学习成果,对一些重要参数进行说明:
1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。
2.gridwidth,gridheight—设置组件跨越的行列,默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间。
3. weightx,weighty——用来设置窗口变大时,各组件跟着变大的比例。比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B.
4.anchor — 当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
5.insets —— 设置组件之间彼此的间距。 它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。
好了,先看一下左右选择框的实现吧:
import java.awt.Dimension.
import java.awt.GridBagConstraints.
import java.awt.GridBagLayout.
import java.awt.event.ActionEvent.
import java.awt.event.ActionListener.
import javax.swing.BorderFactory.
import javax.swing.DefaultListModel.
import javax.swing.JButton.
import javax.swing.JFrame.
import javax.swing.JLabel.
import javax.swing.JList.
import javax.swing.JPanel.
import javax.swing.JTextField.
import javax.swing.UIManager.
import javax.swing.UnsupportedLookAndFeelException.
public class MyFrame extends JFrame {
JPanel mainPanel = new JPanel().
JButton add = new JButton().
JButton left = new JButton().
JButton right = new JButton().
JLabel label = new JLabel().
JTextField field = new JTextField().
DefaultListModel leftModel = new DefaultListModel().
DefaultListModel rightMOdel = new DefaultListModel().
JList leftList = new JList(leftModel).
JList rightList = new JList(rightMOdel).
JPanel left_Right_Panel = new JPanel().
public MyFrame() {
this.setTitle("test").
this.setPreferredSize(new Dimension(600, 400)).
this.initComponent().
this.addData().
this.setVisible(true).
this.pack().
}
/**
* 初始化组件
*/
private void initComponent() {
label.setText("添加选项:").
add.setText("添加").
leftList.setPreferredSize(new Dimension(150, 150)).
rightList.setPreferredSize(leftList.getPreferredSize()).
left.setText("左").
right.setText("右").
mainPanel.setBorder(BorderFactory.createTitledBorder("左右选择框")).
mainPanel.setLayout(new GridBagLayout()).
GridBagConstraints c = new GridBagConstraints().
c.gridx = 0. // 0行0列
c.gridy = 0.
c.gridwidth = 1.
c.gridheight = 1.
c.fill = GridBagConstraints.HORIZONTAL.
c.weightx = 0.
c.weighty = 0.
mainPanel.add(label, c).
c.gridx .
c.weightx = 1.
mainPanel.add(field, c).
c.gridx .
c.weightx = 0.
c.gridwidth = 1.
c.gridheight = 1.
// c.fill = GridBagConstraints.HORIZONTAL.
mainPanel.add(add, c).
c.gridx = 0.
c.gridy = 1.
c.weightx = 1.
c.weighty = 1.
c.gridwidth = 2.
c.gridheight = 2.