JAVA图形界面设计二.docx
- 文档编号:4662023
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:36
- 大小:330.18KB
JAVA图形界面设计二.docx
《JAVA图形界面设计二.docx》由会员分享,可在线阅读,更多相关《JAVA图形界面设计二.docx(36页珍藏版)》请在冰豆网上搜索。
JAVA图形界面设计二
第6章图形界面设计
(二)
6.1选择框和单选按钮
选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的“on/off”选择功能,让用户在一组选择项目中作选择。
6.1.1选择框
选择框(JCheckbox)的选中与否形状是一个小方块,被选中则在框中打勾。
当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称为复选框。
与选择框相关的接口是ItemListener,事件类是ItemEvent。
JCheckbox类常用的构造方法有以下3个:
(1)JCheckbox(),用空标题构造选择框。
(2)JCheckbox(Strings),用给定的标题s构造选择框。
(3)JCheckbox(Strings,booleanb),用给定的标题s构造选择框,参数b设置选中与否的初始状态。
JCheckbox类的其他常用方法如下:
(1)getState(),获取选择框的状态。
(2)setState(booleanb),设置选择框的状态。
(3)getLabel(),获取选择框的标题。
(4)setLabel(Strings),设置选择框的标题。
(5)isSelect(),获取选择框是否被选中的状态。
(6)itemStateChanged(ItemEvente),处理选择框事件的接口方法
(7)getItemSelectable(),获取事件源
(8)addItemListener(ItemListenerI),为选择框设定的监视器。
(9)removeItemListener(ItemListenerI),移去选择框的监视器。
【例6.1】声明一个面板子类,面板子类对象有3个选择框。
classPanel1extendsJPanel{
JCheckboxbox1,box2,box3;
Panel1(){
box1=newJCheckbox("足球");
box2=newJCheckbox("排球");
box3=newJCheckbox("蓝球");
add(box1);add(box2);add(box3);
}
}
6.1.2单选框
当在一个容器中放入多个选择框,且没有用ButtonGroup对象将它们分组,则可以同时选中多个选择框。
如果使用ButtonGroup对象将选择框分组,同一时刻组内的多个选择框只允许有一个被选中,称同一组内的选择框为单选框。
单选框分组的方法是先创建ButtonGroup对象,然后将希望为同组的选择框添加到同一个ButtonGroup对象中。
参见例6.2程序的面板子类Panel2的声明,组内有3个单选框。
6.1.3单选按钮
单选按钮(JRadioButton)的功能与单选框相似。
使用单选按钮的方法是将一些单选按钮用ButtonGroup对象分组,使同一组内的单选按钮只允许一个被选中。
单选按钮与单选框的差异是显示的样式不同,单选按钮是一个圆形的按钮,单选框是一个小方框。
JRadioButton类的常用构造方法有以下几个:
(1)JRadioButton(),用空标题构造单选按钮。
(2)JRadioButton(Strings),用标题s构造单选按钮。
(3)JRadioButton(Strings,booleanb),用标题s构造单选按钮,参数b设置选中是否的初始状态。
单选按钮使用时需要使用ButtonGroup将单选按钮分组,单选按钮分组的方法是先创建ButtonGroup对象,然后将同组的单选按钮添加到同一个ButtonGroup对象中。
参见例6.2程序的面板子类Panel1的声明,组内有3个单选按钮。
6.1.4选择项目事件处理
用户对选择框或单选按钮做出选择后,程序应对这个选择作出必要的相应,程序为此要处理选择项目事件。
选择项目事件处理程序的基本内容有:
监视选择项目单选的类要实现接口ItemListener,程序要声明和建立选择对象,为选择对象注册监视器,编写处理选择项目事件的接口方法itemStateChanged(ItemEvente),在该方法内用getItemSelectable()方法获取事件源,并作相应处理。
【例6.2】处理选择项目事件的小应用程序。
一个由3个单选按钮组成的产品选择组,当选中某个产品时,文本区将显示该产品的信息。
另有一个由3个选择框组成的购买产品数量选择框组,当选择了购买数量后,在另一个文本框显示每台价格。
importjava.applet.*;
importjavax.swing.*;
importjava.awt.*;importjava.awt.event.*;
classPanel1extendsPanel{
JRadioButtonbox1,box2,box3;
ButtonGroupg;
Panel1(){
setLayout(newGridLayout());
g=newButtonGroup();
box1=newJRadioButton(MyWindow.fName[0]+"计算机",false);
box2=newJRadioButton(MyWindow.fName[1]+"计算机",false);
box3=newJRadioButton(MyWindow.fName[2]+"计算机",false);
g.add(box1);g.add(box2);g.add(box3);
add(box1);add(box2);add(box3);
add(newJLabel("计算机3选1"));
}
}
classPanel2extendsPanel{
JCheckBoxbox1,box2,box3;
ButtonGroupg;
Panel2(){
setLayout(newGridLayout(1,3));
g=newButtonGroup();
box1=newJCheckBox("购买1台");
box2=newJCheckBox("购买2台");
box3=newJCheckBox("购买3台");
g.add(box1);g.add(box2);g.add(box3);
add(box1);add(box2);add(box3);
add(newJLabel("选择1、2或3"));
}
}
classMyWindowextendsJFrameimplementsItemListener{
Panel1panel1;Panel2panel2;
JLabellabel1,label2;
JTextAreatext1,text2;
staticStringfName[]={"HP","IBM","DEL"};
staticdoublepriTbl[][]={{1.20,1.15,1.10},{1.70,1.65,1.60},{1.65,1.60,1.58}};
staticintproduction=-1;
publicMyWindow(Strings){
super(s);
Containercon=this.getContentPane();
con.setLayout(newGridLayout(3,2));
this.setLocation(100,100);
this.setSize(400,100);
panel1=newPanel1();
panel2=newPanel2();
label1=newJLabel("产品介绍",JLabel.CENTER);
label2=newJLabel("产品价格",JLabel.CENTER);
text1=newJTextArea();text2=newJTextArea();
con.add(label1);con.add(label2);
con.add(panel1);con.add(panel2);
con.add(text1);con.add(text2);
panel1.box1.addItemListener(this);
panel1.box2.addItemListener(this);
panel1.box3.addItemListener(this);
panel2.box1.addItemListener(this);
panel2.box2.addItemListener(this);
panel2.box3.addItemListener(this);
this.setVisible(true);this.pack();
}
publicvoiditemStateChanged(ItemEvente){
if(e.getItemSelectable()==panel1.box1){
production=0;
text1.setText(fName[0]+"公司生产");text2.setText("");
}elseif(e.getItemSelectable()==panel1.box2){
production=1;
text1.setText(fName[1]+"公司生产");text2.setText("");
}elseif(e.getItemSelectable()==panel1.box3){
production=2;
text1.setText(fName[2]+"公司生产");text2.setText("");
}else{
if(production==-1)return;
if(e.getItemSelectable()==panel2.box1){
text2.setText(""+priTbl[production][0]+"万元/台");
}elseif(e.getItemSelectable()==panel2.box2){
text2.setText(""+priTbl[production][1]+"万元/台");
}elseif(e.getItemSelectable()==panel2.box3){
text2.setText(""+priTbl[production][2]+"万元/台");
}
}
}
}
publicclassExample6_2extendsApplet{
MyWindowmyWin=newMyWindow("选择项目处理示例程序");
}
6.2列表和组合框
列表和组合框是又一类供用户程序的界面组件,用于在一组选择项目中选择,组合框还可以输入新的选择。
6.2.1列表
列表(JList)在界面中表现为列表框,是JList类或它的子类的对象。
程序可以在列表框中加入多个文本选项条目。
列表事件的事件源有两种:
一是鼠标双击某个选项,二是鼠标单击某个选项。
双击选项是动作事件,与该事件相关的接口是ActionListener,注册监视器的方法是addActionListener(),接口方法是actionPerformed(ActionEvente)。
单击方法是选项事件,与选项事件相关的接口是ListSelectionListener,注册监视器的方法是addListSelectionListener,接口方法是valueChanged(ListSelectionEvente)。
JList类的常用构造方法:
(1)JList(),建立一个列表。
(2)JList(String[]list),建立列表,list是字符串数组,数组元素是列表的选择条目。
JList类的其他常用方法:
(1)getSelectedIndex(),获取选项的索引。
(2)getSelectedValue(),获取选项的值。
(3)getItemCount(),获取列表中的选项条数。
(4)setVisibleRowCount(intn),设置列表可见行数。
(5)setSelectedMode(intseleMode),设置列表选择模型。
选择模型有单选和多项两种。
单选:
ListSelectionModel.SINGLE_SELECTION。
多项:
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION。
(6)remove(intn),从列表中的选项菜单中删除指定索引的选项。
(7)removeAll(),删除列表中的全部选项。
列表可以添加滚动条,列表添加滚动条的方法是先创建列表,然后再创建一个JScrollPane滚动面板对象,在创建滚动面板对象时指定列表。
以下代码示意为列表list2添加滚动条:
JScrollPanejsp=newJScrollPane(list2);//为列表加滚动条
【例6.3】小应用程序有两个列表,第一个列表只允许单选,第二个列表允许多选。
importjava.applet.*;
importjavax.swing.*;
importjava.awt.*;
importjavax.swing.event.*;
classMyWindowextendsJFrameimplementsListSelectionListener{
JListlist1,list2;
Stringnews[]={"人民日报","新民晚报","浙江日报","文汇报"};
Stringsports[]={"足球","排球","乒乓球","篮球"};
JTextAreatext;
MyWindow(Strings){
super(s);
Containercon=getContentPane();
con.setBackground(Color.BLUE);
con.setLayout(newGridLayout(2,2));
con.setSize(200,50);
list1=newJList(news);
list1.setVisibleRowCount(3);
list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list1.addListSelectionListener(this);
list2=newJList(sports);
list2.setVisibleRowCount
(2);
list2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list2.addListSelectionListener(this);
con.add(list1);
con.add(list2);
text=newJTextArea(10,20);
con.add(text);
this.setVisible(true);this.pack();
}
publicvoidvalueChanged(ListSelectionEvente){
if(e.getSource()==list1){
text.setText(null);
ObjectlistValue=((JList)e.getSource()).getSelectedValue();
StringseleName=listValue.toString();
for(inti=0;i if(news[i].equals(seleName)){ text.append(seleName+": 被选中\n"); } }elseif(e.getSource()==list2){ text.setText(null); inttempList[]=list2.getSelectedIndices(); for(inti=0;i text.append(tempList[i]+": 被选中\n"); } } } publicclassExample6_3extendsApplet{ MyWindowmyWin=newMyWindow("列表示例"); } 6.2.2组合框 组合框(JComboBox)是文本框和列表的组合,可以在文本框中输入选项,也可以单击下拉按钮从显示的列表中进行选择。 组合框的常用构造方法有以下几个: (1)JComboBox(),建立一个没有选项的JComboBox对象。 (2)JComboBox(JcomboBoxModelaModel),用数据模型建立一个JComboBox对象。 (3)JComboBox(Object[]items),利用数组对象建立一个JComboBox对象。 组合框的其他常用方法有以下几个: (1)addItem(Objectob),向组合框加入选项。 (2)getItemCount(),获取组合框的条目总数。 (3)removeItem(Objectob),删除指定选项。 (4)removeItemAt(intindex),删除指定索引的选项。 (5)insertItemIndex(Objectob,intindex),在指定的索引处插入选项。 (6)getSelectedIndex(),获取所选项的索引值(从0开始)。 (7)getSelectedItem(),获取所选项的内容。 (8)setEditable(booleanb),设为可编辑。 组合框的默认状态是不可编辑的,需要调用本方法设定为可编辑,才能相应选择输入事件。 在JComboBox对象上发生的事件分为两类: 一是用户选定项目,事件响应程序获取用户所选的项目。 二是用户输入项目后按回车键,事件响应程序读取用户的输入。 第一类事件的接口是ItemListener;第二类是输入事件,接口是ActionListener。 【例6.4】一个说明组合框用法的应用程序。 程序中声明的组合框子类实现ItemListener接口和ActionListener接口。 组合框子类的窗口中设置了一个文本框和一个组合框,组合框中有三个选择。 实现接口的监视方法将组合框的选择结果在文本框中显示。 importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; publicclassExample6_4{ publicstaticvoidmain(Stringargs[]){ ComboBoxDemo1myComboBoxGUI=newComboBoxDemo1(); } } classComboBoxDemo1extendsJFrameimplementsActionListener,ItemListener{ publicstaticfinalintWidth=350; publicstaticfinalintHeight=350; StringproList[]={"踢足球","打篮球","打排球"}; JTextFieldtext; JComboBoxcomboBox; publicComboBoxDemo1(){ setSize(Width,Height); setTitle("组合框使用示意程序"); ContainerconPane=getContentPane(); conPane.setBackground(Color.BLUE); conPane.setLayout(newFlowLayout()); comboBox=newJComboBox(proList); comboBox.addActionListener(this); comboBox.addItemListener(this); comboBox.setEditable(true); conPane.add(comboBox); text=newJTextField(10); conPane.add(text); this.setVisible(true); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==comboBox) text.setText(comboBox.getSelectedItem().toString()); } publicvoiditemStateChanged(ItemEvente){ if(e.getSource()==comboBox) text.setText(comboBox.getSelectedItem().toString()); } } 6.3菜单 有两种类型的菜单: 下拉式菜单和弹出式菜单。 本书只讨论下拉式菜单编程方式。 菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的。 菜单与JComboBox的相同之处是每次只可以选择一个项目。 在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件。 该事件被发送给哪个选项的监视器,事件的意义由监视器解释。 6.3.1菜单条、菜单和菜单项 下拉式菜单通过出现在菜单条上的名字来可视化表示,菜单条(JmenuBar)通常出现在JFrame的顶部,一个菜单条显示多个下拉式菜单的名字。 可以用两种方式来激活下拉式菜单。 一种是按下鼠标的按钮,并保持按下状态,移动鼠标,直到释放鼠标完成选择,高亮度显示的菜单项即为所选择的。 另一种方式是当光标位于菜单条中的菜单名上时,点击鼠标。 在这种情况下,菜单会展开,且高亮度显示菜单项。 一个菜单条可以放多个菜单(JMenu),每个菜单又可以有许多菜单项(JMenuItem)。 例如,Eclipse环境的菜单条有File、Edit、Source、Refactor等菜单,每个菜单又有许多菜单项。 例如,File菜单有New、OpenFile、Close、CloseAll等菜单项。 向窗口增设菜单的方法是: 先创建一个菜单条对象,然后再创建若干菜单对象,把这些菜单对象放在菜单条里,再按要求为每个菜单对象添加菜单项。 菜单中的菜单项也可以是一个完整的菜单。 由于菜单项又可以是另一个完整菜单,因此可以构造一个层次状菜单结构。 1.菜单条 类JMenubar的实例就是菜单条。 例如,以下代码创建菜单条对象menubar: J
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 图形界面 设计