📄 java入门(9) java与gui.htm
字号:
<BR><BR> 口令文本框(JPasswordField)是一种特殊的文本框,在口令文本框中输入任何字符串都将显示成为“*”,这样就可以不让别人知道你输入的是什么,这种文本框比较适合与密码、口令的输入,所以称之为口令文本框。
<BR><BR> 为了安全起见,获取口令文本框中的密码(口令)使用的方法与普通文本框不同。它使用方法:getPassword()。
<BR><BR> “越麻烦越安全”,所以,Java语言中为你获取口令再添加了一层麻烦(我看来是一种不必要的麻烦),getPassword()方法将返回一个char数组,我们还得将其转换成为字符串。以下就是一个转换的实例:
<BR><BR><BR>String passwd=new String(passwdTextField.getPassword())
<BR><BR><BR><BR> 9.6.3 文本区 <BR><BR> 实例说明
<BR><BR> 正如我们看到的一样,普通文本框TextField只能输入一行,如果要提供一个多行的输入界面,那怎么办呢?下面我们就看一下下面这个程序:
<BR><BR> 源程序:useTextArea.java <BR><BR><BR>import javax.swing.*;
<BR>import java.awt.*; <BR>import java.awt.event.*; <BR>public class
useTextarea extends JApplet <BR>{ <BR>JButton buttonClear; <BR>JTextArea
textarea1; <BR>public void init() <BR>{ <BR>JPanel
panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new FlowLayout());
<BR>buttonClear=new JButton("Clear all"); <BR>textarea1=new
JTextArea("Enter new text",5,15); <BR>panel1.add(textarea1);
<BR>panel1.add(buttonClear); <BR>buttonClear.addActionListener(new
ActionListener() <BR>{ <BR>public void actionPerformed(ActionEvent evt)
<BR>{ <BR>textarea1.setText(""); <BR>} <BR>}); <BR>} <BR>}
<BR><BR><BR><BR> 2.使用javac编译这个程序,然后编辑一个显示这个Java
Applet的HTML页面,建议高度为100,宽度为300。
<BR><BR> 3.最后我们再使用appletviewer来运行这个程序,这个程序的输出如下图所示: <BR><BR><BR> 图9-14
程序useTextarea.java的运行结果 <BR><BR> 接着,我们就可以在这个文本区内写多行文本了。大家在按下“Clear
all”按钮之前,想一下,会发现什么结果? <BR><BR> 传授新知
<BR><BR> 这个程序中,主要需要说明的只有关于TextArea部件(文本区)的一些语句: <BR><BR> 1)
<BR><BR><BR>JTextArea textarea1; <BR>…… <BR>textarea1=new JTextArea("Enter
new text",5,15);
<BR><BR><BR><BR> 首先,我们定义了一个JTextArea类的对象textarea1,然后使用new操作符来创建这个对象textarea1(也就是一个文本区)。与文本框类似,文本区的构造器也有三种:
<BR><BR> A. JTextField(int rows,int columns)
<BR><BR> 在这个构造器中,有两个整型参数rows(这个单词的中文意思是行)和columns(这个单词的中文意思是列),也就是说,这两参数用来指令文本区的行数,与列宽。
<BR><BR> 这里的列宽与文本框一样,是一种长度,用能够显示多少个个小写“m”(当前选择的字体)来衡量的宽度。而行数,就很好理解了,就是能够输入的行数。
<BR><BR> 要注意的是,这里的行数、列数都是只显示出来的框的大小。如果一行中超过了列宽,将会使文本区变得越来越宽,如下图所示:
<BR><BR><BR> 图9-15 超过了列宽
<BR><BR> 由于输入的文本超过了文本区原来的宽度,使得文本区变得越来越宽,把按钮都挤到下一行中去了。 <BR><BR> 注意:
<BR><BR> 如果把多出来的文本删除掉后,文本区将变成原来的大小。 <BR><BR> 同样的,如果输入太多行,将引起如下图所示的情况:
<BR><BR><BR> 图9-16 超过了行数 <BR><BR> B. JTextArea(String text)
<BR><BR> 也可以只带一个字符串型参数text调用构造器方法,这个字符串将会在程序一执行时就显示在文本区中。 <BR><BR> C.
JTextField(String text ,int rows,int columns)
<BR><BR> 而如果你既想设置默认的字符串,又想设置它的宽度,就可以调用第三种构造器。在本例中,我们就是调用这个构造器,构建了一个5行,15个“m”宽的文本区,让其一启动就显示一段文本:“Enter
new text”。 <BR><BR> 注意: <BR><BR> 同样的,调用JTextArea的构造器时,一定要带上参数,否则将会出错。
<BR><BR> 2) <BR><BR><BR>buttonClear.addActionListener(new
ActionListener() <BR>{ <BR>public void actionPerformed(ActionEvent evt)
<BR>{ <BR>textarea1.setText(""); <BR>} <BR>});
<BR><BR><BR><BR> 在这一段程序中,我们为按钮buttonClear增加了一个监测器,使得当这个按钮按下时就执行:textarea1.setText(“”)。与文本框TextField一样,文本区TextArea也提供了设置显示文本的方法:setText(String
text)。 <BR><BR> 大家想想,将显示文本设置为“”,意味着什么,对!就是让其什么也不显示,这也就是前面那个问题(大家在按下“Clear
all”按钮之前,想一下,会发现什么结果?)的答案。
<BR><BR> 到现在,我们已经读懂了这个程序,但通过执行程序时,我们发现了一个十分不好的问题,那就是在文本区内不会自动换行。我们并不希望文本区变得越来越宽!
<BR><BR> 怎么办呢?Java为文本区TextArea提供了一个方法,使得自动换行成为可能:
<BR><BR><BR>textarea1.setLineWrap(true)
<BR><BR><BR><BR> 只需将这条语句加入程序,就会使得我们编辑到右边时会自动换行。如果我们要恢复成不自动换行,就调用:
<BR><BR><BR>textarea1.setLineWrap(false) <BR><BR><BR><BR> 自测练习
<BR><BR> 1) 部件____________适合于提供密码输入界面。 <BR><BR> a. JTextArea
b.JTextField c.JPasswordField <BR><BR> 2) 在文本区中________输入超过程序中定义的行数。
<BR><BR> a.能 b.不能 <BR><BR> 3) 我们可以使用______________来清除文本框text1中的文本。
<BR><BR> a.text1.clearText() b.text1.setText(“”)
<BR><BR> c.text1.deleteText() d.以上都可以 <BR><BR> 4)
如果我们调用____________来获得口令文本框passwd1中的文本。 <BR><BR> a.passwd1.getText()
b.passwd1.getPassword() <BR><BR> 5)
在程序中_______________,就能够防止因为在一行中输入过多的文本,而使文本区textarea1变宽。
<BR><BR> a.不需要做任何考虑 b.textarea1.setLineWrap(true)
<BR><BR> c.textarea1.setLineWrap(false) d.textarea1.noWrap() <BR><BR> 6)
如果我们使用textfield1=new JTextField(“TEST”)来创建一个文本框,那么这个文本框的宽度有多大?
<BR><BR> ____________________________________________________________________
<BR><BR> 7)
请在程序useTextarea.java中加入textarea1.setLineWrap(true),然后再执行这个程序,发现一下,还存在什么样的问题。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 8) 根据以下要求,编写程序
<BR><BR> 设置两个文本框,一个用来输入UserName,另一个用来输入Password;再设置一个按钮OK和一个文本区。
<BR><BR> 如果我们按下OK按钮,则右边的文本区中就会显示: <BR><BR> UserName:用户名
<BR><BR> Password:密码 <BR><BR> 其中用户名、密码就是用户输入的内容,如果没有输入则不显示。程序输出如下图所示:
<BR><BR><BR> 图9-17 程序lianxi905.java的输出
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 练习答案 <BR><BR> 1)c
由于输入密码的地方,应该不能明文显示,否则容易被边上的人从偷看到,我们可以借助Java中提供的口令文本框PasswordField来实现。这样,你输入的内容就变成了星号,不怕被人偷看到了。
<BR><BR> 2)a 能,而且会使得文本区的行数增加。 <BR><BR> 3)b
一个文本框并不存在cleatText()方法,也没有提供delete()方法,但我们可以通过调用setText(“”)来实现,这是因为,我们让它显示的文本变成了“”。也就空文本,这难道不是清除所有文本吗?
<BR><BR> 4)b 口令文本框要使用特殊的方法getPassword()来获得口令文本。 <BR><BR> 5)b
通过使文本区自动换行,就可以有效地避免这个问题。 <BR><BR> 6)这个文本框的宽度就是字符串“TEST”的大小。如下图所示:
<BR><BR><BR> 图9-18 练习答案参考图(1)
<BR><BR> 7)还存在一个问题,那就是这个程序十分愚笨,它虽然会自动换行,但是却常把一个单词分在两行里,如下图所示:
<BR><BR><BR> 图9-19 练习答案参考图(2) <BR><BR> 一些提示:
<BR><BR> 其实文本区部件还提供了一个方法来解决这个问题,那就是: <BR><BR><BR>public void
setWrapStyleWord(boolean word)
<BR><BR><BR><BR> 如果在程序中,加入textarea1.setWrapStyleWord(true),那么程序输入则是:
<BR><BR><BR> 图9-20 练习答案参考图(3) <BR><BR> 怎么样,效果是不是更好了! <BR><BR> 8)
请参考以下实现实例: <BR><BR> 源程序:lianxi905.java <BR><BR><BR>import javax.swing.*;
<BR>import java.awt.*; <BR>import java.awt.event.*; <BR>public class
lianxi905 extends JApplet <BR>{ <BR>Label label1,label2; <BR>JTextField
username; <BR>JPasswordField passwd; <BR>JButton buttonOK; <BR>JTextArea
showResult; <BR>String out; <BR>public void init() <BR>{ <BR>JPanel
panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new FlowLayout());
<BR>label1=new Label("Please input your name:"); <BR>username=new
JTextField(15); <BR>label2=new Label("Please input your password:");
<BR>passwd=new JPasswordField(15); <BR>buttonOK=new JButton("OK");
<BR>showResult=new JTextArea(2,15); <BR>panel1.add(label1);
<BR>panel1.add(username); <BR>panel1.add(label2); <BR>panel1.add(passwd);
<BR>panel1.add(buttonOK); <BR>panel1.add(showResult);
<BR>buttonOK.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{ <BR>out="Username:
"+username.getText()+" "; <BR>out=out+"Password: "+new
String(passwd.getPassword()); <BR>showResult.setText(out); <BR>} <BR>});
<BR>} <BR>}
<BR><BR><BR><BR> 请大家注意到,我们是如何生成在文本区showResult显示的文本信息(存放在字符串变量out中)的:
<BR><BR><BR>out="Username: "+username.getText()+" ";
<BR>out=out+"Password: "+new String(passwd.getPassword());
<BR><BR><BR><BR> 先让out等于“Username:”+username.getText(),这就使其包含了提示字符“Username:”,而后面的内容是另一部分的,所以我们在这个后面加上了“
”,这是一个转义符,代表回车(也就是另起一行)。
<BR><BR> 然后再将其加上提示字符“Password:”,最后是调用了getPassword()方法,然后将其转换为字符串型。 <BR>
<P align=right>整理发布:admin</P></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid"
vAlign=top width="100%" height=11>
<P align=left><FONT color=#7a7978>文摘分类>> </FONT><FONT
color=#999999>编程基础 | </FONT><FONT color=#7a7978>阅读次数>>
</FONT><FONT color=#999999>485 | </FONT><FONT
color=#7a7978>推荐人数>> </FONT><FONT color=#999999>0 |
</FONT><FONT color=#7a7978>整理日期>> </FONT><FONT
color=#999999>2003-03-07</FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=center><INPUT class=rim onclick=window.close() type=button value=关闭窗口 name=close></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -