📄 java入门(9) java与gui.htm
字号:
<BR>} <BR>} <BR><BR><BR><BR> 2.使用javac编译这个程序,然后编辑一个显示这个Java Applet的页面:
<BR><BR> 3.最后使用appletviewer来运行这个程序,这个程序的输出如下图所示: <BR><BR><BR> 图9-9
程序useList的运行结果 <BR><BR> 当你选择green后,标签将以绿色显示You selected
green;而若你选择blue后,标签将以蓝色显示You selected blue。 <BR><BR> 传授新知
<BR><BR> 这一节中,我们将遇到一个新的部件---列表框。下面,就对刚才这个程序做一些点评。 <BR><BR> 1)
<BR><BR><BR>colorList=new List(); <BR>colorList.add("red");
<BR>colorList.add("green"); <BR>colorList.add("blue");
<BR>colorList.select(0); <BR>panel1.add(colorList);
<BR><BR><BR><BR> 在这一段程序中,我们定义了一个列表框List:colorList。列表框用来将多个表项列出来,以供用户选择,如下图所示:
<BR><BR><BR> 图9-10 列表框
<BR><BR> 首先,我们使用new操作符创建一个colorList,然后调用列表框的add方法,增加可供选择的表项(red、green和blue)。最后,使用select方法,使得缺省选择是red(第0项)。
<BR><BR> 最后使用容器Panel的add方法将它们装入Panel。 <BR><BR> 一些提示:
<BR><BR> 如果要让缺省选择的是blue,则应该使用colorList.select(2)。
<BR><BR> 为列表框的指定位置上增加项目,可以使用方法: <BR><BR><BR>public synchronized void
add(String item,int index)
<BR><BR><BR><BR> 其中,item是一个字符串,用来存放要显示的标签文本。而index则是添加的位置。列表框的位置是一个从0开始的数,所以,如果用户在位置0处增加项目,那么该项目将增加在列表框的顶部。如果用户试图在-1处或大于列表框中项目数(甚至象例子中,不给出index参数)的位置上增加项目,那么将增加到列表框的末尾。
<BR><BR> 如果你想删除某一项,则可以使用方法: <BR><BR><BR>public synchronized void
remove(int position)
<BR><BR><BR><BR> 其中position就是你要删除项目的位置。如果你想删除掉所有的项,则可调用方法:
<BR><BR><BR>public synchronized void removeAll() <BR><BR><BR><BR> 2)
<BR><BR><BR>colorList.addItemListener(new ItemListener() <BR>{ <BR>public
void itemStateChanged(ItemEvent evt) <BR>{ <BR>…… <BR>} <BR>});
<BR><BR><BR><BR> 与其它部件一样,可以使用addItemListener方法为其设置一个监测器,当列表框选择项改变时就会激活这个监测器。
<BR><BR> 3) <BR><BR><BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>{ <BR>selNum=colorList.getSelectedIndex();
<BR>sel=colorList.getItem(selNum); <BR>selString="You selected "+sel;
<BR>label1.setText(selString);
<BR><BR><BR><BR> 在这一段程序中,我们首先调用了列表框的getSelectedIndex
()方法取得你所选择项目的编号。这个项目返回的是一个整型的索引号。
<BR><BR> 接着,我们再使用这个索引号调用列表框的getItem方法获取该项目的标签文本。
<BR><BR> 为了让标签中显示的文本更加清晰、易懂,我们在标签文本的前面加上了“You
Selected”,然后调用标签label1的setText方法改变标签所显示的文本。 <BR><BR> 4)
<BR><BR><BR>switch(selNum) <BR>{ <BR>case 0:
<BR>label1.setForeground(Color.red); <BR>break; <BR>case 1:
<BR>label1.setForeground(Color.green); <BR>break; <BR>case 2:
<BR>label1.setForeground(Color.blue); <BR>break; <BR>}
<BR><BR><BR><BR> 这是一个多分支结构,它根据所选择的项目编号(前面,我们已经调用getSelectedIndex
()方法取得了项目编号,存放在变量selNum中)来做相应的操作。 <BR><BR><BR><1> case
0:假设selNum=0,那么就执行 <BR>label1.setForeground(Color.red); <BR>break;
<BR><BR><BR><BR> 也就是,将标签label1的前景色(字的颜色)设置为红色,然后退出switch-case语句。
<BR><BR><BR><2> case 1:假设selNum=1,那么就执行
<BR>label1.setForeground(Color.green); <BR>break;
<BR><BR><BR><BR> 将标签label1的前景色设置为绿色,然后退出switch-case语句。
<BR><BR><BR><3> case 2:假设selNum=2,那么就执行
<BR>label1.setForeground(Color.blue); <BR>break;
<BR><BR><BR><BR> 将标签label1的前景色设置为蓝色,然后退出switch-case语句。
<BR><BR> 文本,将其改为press:按下总次数;否则,让其显示最初的“Press me”。 <BR><BR> 自测练习
<BR><BR> 1) 在程序中要构建一个列表框,要使用_________类。 <BR><BR> a.Checkbox b.Listbox
c.List d.Label <BR><BR> 2) 列表框中第一项的项目编号(也称索引)是________。 <BR><BR> a.0 b.1
c.-1 d.10 <BR><BR> 3) 假设有一个列表框listbox1,要在其最后添加一项,应使用________________语句。
<BR><BR> a.listbox.add(“The end item”,0) b. listbox.add(“The end
item”,10) <BR><BR> c. listbox.add(“The end item”,-1) d. listbox.add(“The
end item”, 1) <BR><BR> 4) 我们可以使用__________________方法,取得当前选择的项目的索引值。
<BR><BR> a. getSelectedIndex() b. getItem() c. getNumber() <BR><BR> 5)
编写一段程序,使其运行结果如下图所示: <BR><BR><BR> 图9-11 练习903题图
<BR><BR> 当按下Add按钮,就在列表框上增加一项:No.x(x是顺序号),当按下Remove按钮,就删除最后一项。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 练习答案 <BR><BR> 1)c 在Java中,类List实现了列表框。 <BR><BR> 2)a 从0开始,而不是1。
<BR><BR> 3)c
要在这后一项添加有三种方法。其一:以-1为位置参数;其二:以大于最大项目索引数的数为位置参数;其三:不带位置参数。因此在此,只有c。
<BR><BR> 4)a getItem是获得显示的内容。 <BR><BR> 5)下面,我们给出一个实现的实例。
<BR><BR> 源程序:lianxi904.java <BR><BR><BR>import javax.swing.*; <BR>import
java.awt.*; <BR>import java.awt.event.*; <BR>public class lianxi904
extends JApplet <BR>{ <BR>List listbox1; <BR>JButton
buttonAdd,buttonRemove; <BR>int counter=0; <BR>public void init() <BR>{
<BR>JPanel panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new
FlowLayout()); <BR>listbox1=new List(); <BR>buttonAdd=new JButton("Add");
<BR>buttonRemove=new JButton("Remove"); <BR>panel1.add(listbox1);
<BR>panel1.add(buttonAdd); <BR>panel1.add(buttonRemove);
<BR>buttonAdd.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{
<BR>listbox1.add("NO."+String.valueOf(counter++)); <BR>} <BR>});
<BR>buttonRemove.addActionListener(new ActionListener() <BR>{ <BR>public
void actionPerformed(ActionEvent evt) <BR>{
<BR>listbox1.remove(counter-1); <BR>counter-=1; <BR>} <BR>}); <BR>} <BR>}
<BR><BR><BR><BR> 9.6 使用文本部件 <BR><BR> 9.6.1 普通文本框 <BR><BR> 实例说明
<BR><BR> 1.编辑以下源程序,生成useText.java文件。 <BR><BR> 源程序:useTextfield.java
<BR><BR><BR>import javax.swing.*; <BR>import java.awt.*; <BR>import
java.awt.event.*; <BR>public class useTextfield extends JApplet <BR>{
<BR>JButton buttonOK; <BR>JTextField text1; <BR>public void init() <BR>{
<BR>JPanel panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new
FlowLayout()); <BR>buttonOK=new JButton("OK"); <BR>text1=new
JTextField(20); <BR>panel1.add(text1); <BR>panel1.add(buttonOK);
<BR>buttonOK.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{ <BR>showStatus(text1.getText());
<BR>} <BR>}); <BR>} <BR>} <BR><BR><BR><BR> 2.使用javac编译这个程序,然后编辑一个显示这个Java
Applet的页面: <BR><BR> 3.最后使用appletviewer来运行这个程序,这个程序的输出如下图所示:
<BR><BR><BR> 图9-12 程序useTextfield.java的运行结果(1)
<BR><BR> 正如上图所示,屏幕上出现了一个宽度为20的文本框和一个OK按钮。我们可以在这个文本框内写入字符。我们输入“Haha,I’m
writing to Java’s TextField!!”,然后单击OK按钮,这时屏幕变为: <BR><BR><BR> 图9-13
程序useTextfield.java的运行结果(2) <BR><BR> 也就是,我们按下OK按钮后,在状态栏上出现了我们输入的文本信息。
<BR><BR> 传授新知
<BR><BR> 多次阅读Java语言源程序,应该为大家积累了不少经验,我想大家在阅读这个程序的时候,因为不再觉得那么费劲了吧。如果你还是觉得读程序是一件痛苦的事的话,我希望你还是好好反省一下,看前面的章节时是不是走马观花了。
<BR><BR> 好了,言归正传,我们一起来看一下上面的这个程序。这个程序中的大部分语句,大家应该都耳熟能详了,陌生的只有关于本小节的主人公---文本框TextField的语句了:
<BR><BR> 1) <BR><BR><BR>JTextField text1; <BR>…… <BR>text1=new
JTextField(20);
<BR><BR><BR><BR> 首先,我们定义了一个JTextField类的对象text1,然后使用new操作符来创建这个对象text1(也就是一个文本框)
<BR><BR> 大家还记得new后面的这个与类名相同的方法称为什么吗?对,构造器。这个类有三种带不同参数的构造器。 <BR><BR> A.
JTextField(int columns)
<BR><BR> 第一种构造器,就是我们在本例中调用的那个,它带了一个整型参数columns,这个单词的中文意思是列,也就是说,这个参数指定了我们要创建的TextField的列宽。这里的列宽指长度,而不是可包含的字符数。
<BR><BR> 那么20,到底是多少宽呢?Java是这样定义的: <BR><BR> 能够显示20个小写“m”(当前选择的字体)的宽度。
<BR><BR> 注意:
<BR><BR> 得再次强调一下,这里的列宽是一种长度,而不是字符数。你可以试一试,在我们这个程序执行后,再这个文本框中输入小写字母“m”,看一看能够输入多少个。但大家也应该注意到,我们在例子中输入的字符数远不止20个。
<BR><BR> B. JTextField(String text)
<BR><BR> 第二种构造器则带的是一个字符串型参数text,这个字符串将会在程序一执行时就显示在文本框中。
<BR><BR> C.JTextField(String text,int columns)
<BR><BR> 而如果你既想设置默认的字符串,又想设置它的宽度,就可以调用第三种构造器。 <BR><BR> 注意:
<BR><BR> 调用JTextField的构造器时,一定要带上参数,否则将会出错。 <BR><BR> 2)
<BR><BR><BR>buttonOK.addActionListener(new ActionListener() <BR>{
<BR>public void actionPerformed(ActionEvent evt) <BR>{
<BR>showStatus(text1.getText()); <BR>} <BR>});
<BR><BR><BR><BR> 大家看到这个语句,应该不会感到陌生吧!它为按钮buttonOK增加一个监测器,监测是否按下按钮。如果按下按钮,就执行:showStatus(text1.getText())语句。
<BR><BR> 这个语句中,有两个新的知识。 <BR><BR> 其一是:showStatus(String
test)方法,它用来在状态栏上显示字符串。
<BR><BR> 其二是:getText()方法,它是JTextField类的一个成员方法,用来获取文本框内的文本。例如本例中text1.getText()就将获得文本框text1中的文本。也就是我们输入的那些东西。
<BR><BR> 整个串起来,得到: <BR><BR> 当我们按下OK按钮时,程序将获取文本框text1中的文本,然后将它们显示到状态栏上。
<BR><BR> 用getText()方法可以获取文本框中的文本,相应的,我们可以使用setText()方法设置文本框中的文本。其语法是:
<BR><BR> 文本框对象.setText(String text) <BR><BR> 这样,就将文本框中的文本改成了字符串text。
<BR><BR> 除此之外,我们还可以使用setHorizontalAlignment方法来设置字符串中文本的对齐方式,具体来说:
<BR><BR> setHorizontalAlignment(Swing constants.CENTER) 居中对齐
<BR><BR> setHorizontalAlignment(Swing constants.LEFT) 左对齐
<BR><BR> setHorizontalAlignment(Swing constants.RIGHT) 右对齐
<BR><BR> 9.6.2 口令文本框 <BR><BR> 传授新知
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -