操作Swing组件
前面介绍了布局管理器,本章节关注常用的组件:text field,可滚动的text area,check box以及list
构造函数
JTextField field = new JtextField(20); //20代表字宽,而不是像素
JTextField field = new JtextField("your name");
使用方法
1.取得文本内容
System.out.printIn(field.getTeXT());
2.设定内容
field.setText("whatever")
field.setText("") //清空字段
3.取得用户输入完毕按下enter键或return键的事件
field.addActionListener(myActionListener);
//也可通过注册按键事件知道用户某个按键操作
4.选取文本字段的内容
field.selectAll();
5.把GUI焦点拉回到文本字段以便用户进行输入操作
field.requestFocus();
Text Area
该组件可以有超过一行以上的文字,只需少许设定即可制作,但无滚动功能,若需滚动,则要将其粘在ScrollPane上。
ScrollPane用于处理滚动的对象,也会考虑文本区域的滚动需求。
构造函数
JTextArea text = new JTextArea(10,20);//代表10行高,20字宽
使用方法
1.只有垂直的滚动条
JScrollPane scroller = new JScrollPane(text);
//将text值赋值给新创建的JScrollPane,即组件放在JScrollPane上
text.setLineWarp(true); //启动自动换行
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//指定只使用垂直滚动条
panel.add(scroller);
2.替换文字内容
text.setText("show time");
3.加入文字
text.append("go go go");
4.选取内容
text.selectAll();
5.把GUI焦点拉回到文本字段以便用户进行输入操作
text.requestFocus();
JCheckBox
构造函数
JCheckBox check = new JCheckBox("go go");
使用方法
1.监听item的事件(被选取或非选取)
check.addItemListener(this);
2.处理事件
public void itemStateChanged(ItemEvent ev){
String onOroff = "off";
if(check.isSelected()) onOrOff = "on";
System.out.printIn("Check box is" + OnOrOff)
}
3.程序控制选取或不选取
check.setSelected(true);
check.setSelected(false);
JList
构造函数
构造函数参数可以是任意类型的数组,不一定为string,但用string表示项目
String [] listEntries = {"a","b","c"};
list = new JList(listEntries)
使用方法
1.显示垂直的滚动条
JScrollPane scroller = new JScrollPane(list);
//将list值赋值给新建的JScrollPane,即组件放在JScrollPane上
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//指定只使用垂直滚动条
panel.add(scroller);
2.设定显示的行数
list.setVisibleRowCount(4); //可滚动,但只可见四行
3.限制用户只能选取一个项目
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
4.注册选择事件
list.addListSelectionListener(this);
5.处理事件(判断选了哪个项目)
public void valueChanged(ListSelectionEvent lse){
if(!lse.getValueIsAdjusting()){ //若没有该if测试,则得到两次事件
String selection = (String)list.getSelectedValue();
//返回一个Object,强制转化为String类型
System.put.printIn(selection);
}
}
书海拾荒
布局管理器能防止组件互相覆盖