最近项目中在用java swing,之前一直没怎么用过,所以开始用的时候有点吃力,现在项目已经进行了一段时间了,写下总结,算是对swing知识的一个梳理。
从总的方面来说,swing的原理是容器控件原理,即通过在容器中放置控件来形成ui。swing的控件还是比较多的,通常用做容器的控件有JFrame,JPanel,JScrollPane(带滚动条的JPanel),Box。这三种控件都可以通过其add方法往自身中添加控件。一般常用的控件有JLabel(标签控件),JButoon(按钮控件),JTextField(文本框控件),JCheckBox(多选框控件),JSlider(滑动条控件),JSpinner(多用于时间控件),JDialog(提示框控件),这些控件都属于比较简单的控件,直接通过构造方法new出来就可以使用,其监听事件可以通过addActionListener方法来实现。
较复杂的控件,如JList和JTable,可以设置数据模型来维护数据。除了控件本身的监听事件外,对数据模型也可以添加事件来进行监控,这样当数据模型发生变化时,就可以调用监听事件进行相应的操作。
swing的布局方式,就目前来说用的布局方式主要有BorderLayout,东西南北中布局;FlowLayout,流式布局,依据控件的长度来排列控件,当一行放满了自动换到下一行,boxLayout, 使用Box组件进行定位。可以指定组件按照水平或者垂直排列,也可以再组件之间添加间隔。另外还有GridLayout,表格布局,在构造器中指定需要的行数与列数,控件将按照从从左到右,从上到下的顺序进行排列。
另外控件还重写protected void paintComponent(Graphics g)的方法,从而实现对控件的重绘,定制控件的样式。
ps:写了这么多,其实从java的角度来说,就是不同的类和类中的方法,每个控件都是一个类,每种布局也是一个类,用于重绘的方法 paintComponent是父类里的方法,子类要想实现特殊的效果就需要继承父类并重写其paintComponent方法。