22.11 通过实例熟悉Swing编程

【实例22.16】本小节给出一个综合实例,希望读者能够真正掌握如何使用Swing编程。


01 import java.awt.*;

02 import javax.swing.*;

03 ///主运行类

04 ///frame1指主框架

05 ///setDefaultCloseOperation指让框架右上角的按钮都有效

06 ///show让框架能显示出来

07 public class Swingtest15

08 {

09 public static void main(String[]args)

10 {

11 gridbaglayoutframe frame1=new gridbaglayoutframe();

12 frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

13 frame1.show();

14 }

15 }

16 ///创建一个顶层框架类

17 ///WIDTH参数是指框架的宽度

18 ///HEIGHT参数是指框架的长度

19 class gridbaglayoutframe extends JFrame

20 {

21 private static final int WIDTH=300;

22 private static final int HEIGHT=200;

23 ///顶层框架的构造器

24 ///setTitle用来设置框架左上角的标题

25 ///setSize用来设置框架的大小

26 ///设置一个容器类的对象con

27 ///通过容器类对象进行添加控件,这里的控件是以类的对象形式出现的

28 public gridbaglayoutframe()

29 {

30 setTitle("学生管理系统");

31 setSize(WIDTH, HEIGHT);

32 Container con=getContentPane();

33 con.add(new studentJPanel(),BorderLayout.CENTER);

34 con.add(new buttonpanel(),BorderLayout.SOUTH);

35 }

36 }

37 ///创建一个学生标签和文本域及文本区所在的容器类

38 class studentJPanel extends JPanel

39 {

40 ///此容器类的构造器

41 ///namelabel标签是指显示为"姓名"的标签

42 ///codelabel标签是指显示为" 学号"的标签

43 ///sexlabel标签是指显示为" 性别"的标签

44 ///addresslabel标签是指显示为"籍贯"的标签

45 ///commentlabel标签是指显示为"简单介绍"的标签

46 ///nametextfield文本域是指显示姓名的文本域

47 //codetextfield文本域是指显示 学号的文本域

48 ///sextextfield文本域是指显示 性别的文本域

49 //addressCombo文本域是指显示地点的组合列表框

50 //commenttextfield文本域是指显示简单介绍的文本区

51 ///Constraints表示创建一个网格组布局管理器对象

52 ///add方法是添加组件的函数,在后面有这个函数的具体内容

53 ///constraints.fill和constraints.anchor指定了控件的摆放方式

54 ///constraints.weightx和constraints.weighty分别是指控件在容器中总共需要占据多少行与列

55 public studentJPanel()

56 {

57 GridBagLayout layout=new GridBagLayout();

58 setLayout(layout);

59 JLabel namelabel=new JLabel("姓名:");

60 JTextField nameTextField=new JTextField(10);

61 JLabel codelabel=new JLabel(" 学号:");

62 JTextField codeTextField=new JTextField(10);

63 JLabel sexlabel=new JLabel(" 性别:");

64 JTextField sexTextField=new JTextField(10);

65 JLabel addresslabel=new JLabel("籍贯:");

66 JComboBox addressCombo=new JComboBox(new String[]{"江西","四川","山西",

67 "湖北","湖南","海南"});

68 JLabel commentLabel=new JLabel("简单介绍");

69 JTextArea sample=new JTextArea();

70 sample.setLineWrap(true);

71 GridBagConstraints constraints=new GridBagConstraints();

72 constraints.fill=GridBagConstraints.NONE;

73 constraints.anchor=GridBagConstraints.EAST;

74 constraints.weightx=5;

75 constraints.weighty=5;

76 add(namelabel, constraints,0,0,1,1);

77 add(codelabel, constraints,0,1,1,1);

78 add(sexlabel, constraints,0,2,1,1);

79 add(addresslabel, constraints,0,3,1,1);

80 constraints.fill=GridBagConstraints.HORIZONTAL;

81 constraints.weightx=100;

82 add(nameTextField, constraints,1,0,1,1);

83 add(codeTextField, constraints,1,1,1,1);

84 add(sexTextField, constraints,1,2,1,1);

85 add(addressCombo, constraints,1,3,1,1);

86 constraints.fill=GridBagConstraints.NONE;

87 constraints.anchor=GridBagConstraints.CENTER;

88 add(sample, constraints,2,0,1,1);

89 constraints.fill=GridBagConstraints.BOTH;

90 add(sample, constraints,2,1,1,1);

91 }

92 ///用来添加组件到容器中的函数

93 ///constraints.gridx指该控件位于哪一列

94 ///constraints.gridy指该控件位于哪一行

95 ///constraints.gridwidth指该控件占据多少列

96 ///constraints.gridheight指该控件占据多少行

97 public void add(Component c, GridBagConstraints constraints, int x, int y, int w, int h)

98 {

99 constraints.gridx=x;

100 constraints.gridy=y;

101 constraints.gridwidth=w;

102 constraints.gridheight=h;

103 add(c, constraints);

104 }

105 }

106 ///一个放置按钮控件的容器类

107 ///okbutton是指确定按钮

108 ///cancelbutton是指取消按钮

109 ///hBox指箱式控制器中的空白条之类的东西

110 class buttonpanel extends JPanel

111 {

112 public buttonpanel()

113 {

114 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

115 JButton okbutton=new JButton("确定");

116 JButton cancelbutton=new JButton("取消");

117 Box hBox=Box.createHorizontalBox();

118 hBox.add(Box.createHorizontalStrut(40));

119 hBox.add(okbutton);

120 hBox.add(Box.createHorizontalGlue());

121 hBox.add(cancelbutton);

122 hBox.add(Box.createHorizontalStrut(40));

123 add(hBox);

124 }

125 }


【代码说明】第1 9~3 6行创建一个顶层框架类gridbaglayoutframe,并继承自JFrame。第38~105行创建一个学生标签和文本域及文本区所在的容器类。第110~125行创建一个放置按钮的容器类。

22.11 通过实例熟悉Swing编程 - 图1

图 22.17 使用网格组布局管理器的综合实例

【运行效果】运行结果如图22.17所示。