📄 chapter13.htm
字号:
放一条信息和字符串s到Text fields,并且阻止字段被编辑(尽管我们能够一直选择文字)。文字的可编辑性是通过setEditable()的真假值来控制的。<br>
<br>
13.6 文本区域<br>
“文本区域”很像文字字段,只是它拥有更多的行以及一些引人注目的更多的功能。另外你能在给定位置对一个文本字段追加、插入或者修改文字。这看起来对文本字段有用的功能相当不错,所以设法发现它设计的特性会产生一些困惑。我们可以认为如果我们处处需要“文本区域”的功能,那么可以简单地使用一个线型文字区域在我们将另外使用文本字段的地方。在Java
1.0版中,当它们不是固定的时候我们也得到了一个文本区域的垂直和水平方向的滚动条。在Java
1.1版中,对高级构建器的修改允许我们选择哪个滚动条是当前的。下面的例子演示的仅仅是在Java1.0版的状况下滚动条一直打开。在下一章里我们将看到一个证明Java
1.1版中的文字区域的例程。<br>
<br>
601-602页程序<br>
<br>
程序中有几个不同的“文本区域”构建器,这其中的一个在此处显示了一个初始字符串和行号和列号。不同的按钮显示得到、追加、修改和插入文字。<br>
<br>
13.7 标签<br>
标签准确地运作:安放一个标签到窗体上。这对没有标签的TextFields和Text
areas
来说非常的重要,如果我们简单地想安放文字的信息在窗体上也能同样的使用。我们能像本章中第一个例程中演示的那样,使用drawString()里边的paint()在确定的位置去安置一个文字。当我们使用的标签允许我们通过布局管理加入其它的文字组件。(在这章的后面我们将进入讨论。)<br>
使用构建器我们能创建一条包括初始化文字的标签(这是我们典型的作法),一个标签包括一行CENTER(中间)、LEFT(左)和RIGHT(右)(静态的结果取整定义在类标签里)。如果我们忘记了可以用getText()和getalignment()读取值,我们同样可以用setText()和setAlignment()来改变和调整。下面的例子将演示标签的特点:<br>
<br>
603-604页程序<br>
<br>
首先是标签的最典型的用途:标记一个文本字段或文本区域。在例程的第二部分,当我们按下“test
1”按钮通过setText()将一串空的空格插入到的字段里。因为空的空格数不等于同样的字符数(在一个等比例间隔的字库里),当插入文字到标签里时我们会看到文字将被省略掉。在例子的第三部分保留的空的空格在我们第一次按下“test
2”会发现标签是空的(trim()删除了每个字符串结尾部分的空格)并且在开头的左列插入了一个短的标签。在工作的其余时间中我们按下按钮进行调整,因此就能看到效果。<br>
我们可能会认为我们可以创建一个空的标签,然后用setText()安放文字在里面。然而我们不能在一个空标签内加入文字-这大概是因为空标签没有宽度-所以创建一个没有文字的空标签是没有用处的。在上面的例子里,“blank”标签里充满空的空格,所以它足够容纳后面加入的文字。<br>
同样的,setAlignment()在我们用构建器创建的典型的文字标签上没有作用。这个标签的宽度就是文字的宽度,所以不能对它进行任何的调整。但是,如果我们启动一个长标签,然后把它变成短的,我们就可以看到调整的效果。<br>
这些导致事件连同它们最小化的尺寸被挤压的状况被程序片使用的默认布局管理器所发现。有关布局管理器的部分包含在本章的后面。<br>
<br>
13.8 复选框<br>
复选框提供一个制造单一选择开关的方法;它包括一个小框和一个标签。典型的复选框有一个小的“X”(或者它设置的其它类型)或是空的,这依靠项目是否被选择来决定的。<br>
我们会使用构建器正常地创建一个复选框,使用它的标签来充当它的自变量。如果我们在创建复选框后想读出或改变它,我们能够获取和设置它的状态,同样也能获取和设置它的标签。注意,复选框的大写是与其它的控制相矛盾的。<br>
无论何时一个复选框都可以设置和清除一个事件指令,我们可以捕捉同样的方法做一个按钮。在下面的例子里使用一个文字区域枚举所有被选中的复选框:<br>
<br>
605页程序<br>
<br>
trace()方法将选中的复选框名和当前状态用appendText()发送到文字区域中去,所以我们看到一个累积的被选中的复选框和它们的状态的列表。<br>
<br>
13.9 单选钮<br>
单选钮在GUI程序设计中的概念来自于老式的电子管汽车收音机的机械按钮:当我们按下一个按钮时,其它的按钮就会弹起。因此它允许我们强制从众多选择中作出单一选择。<br>
AWT没有单独的描述单选钮的类;取而代之的是复用复选框。然而将复选框放在单选钮组中(并且修改它的外形使它看起来不同于一般的复选框)我们必须使用一个特殊的构建器象一个自变量一样的作用在checkboxGroup对象上。(我们同样能在创建复选框后调用setCheckboxGroup()方法。)<br>
一个复选框组没有构建器的自变量;它存在的唯一理由就是聚集一些复选框到单选钮组里。一个复选框对象必须在我们试图显示单选钮组之前将它的状态设置成true,否则在运行时我们就会得到一个异常。如果我们设置超过一个的单选钮为true,只有最后的一个能被设置成真。<br>
这里有个简单的使用单选钮的例子。注意我们可以像其它的组件一样捕捉单选钮的事件:<br>
<br>
606-607页程序<br>
<br>
显示的状态是一个文字字段在被使用。这个字段被设置为不可编辑的,因为它只是用来显示数据而不是收集。这演示了一个使用标签的可取之道。注意字段内的文字是由最早选择的单选钮“Radio
button 2”初始化的。<br>
我们可以在窗体中拥有相当多的复选框组。<br>
<br>
13.10 下拉列表<br>
下拉列表像一个单选钮组,它是强制用户从一组可实现的选择中选择一个对象的方法。而且,它是一个实现这点的相当简洁的方法,也最易改变选择而不至使用户感到吃力(我们可以动态地改变单选钮,但那种方法显然不方便)。Java的选择框不像Windows中的组合框可以让我从列表中选择或输入自己的选择。在一个选择框中你只能从列表中选择仅仅一个项目。在下面的例子里,选择框从一个确定输入的数字开始,然后当按下一个按钮时,新输入的数字增加到框里。你将可以看到选择框的一些有趣的状态:<br>
<br>
607-608页程序<br>
<br>
文本字字段中显示的“selected index,"也就是当前选择的项目的序列号,在事件中选择的字符串就像action()的第二个自变量的字串符描述的一样好。<br>
运行这个程序片时,请注意对Choice框大小的判断:在windows里,这个大小是在我们拉下列表时确定的。这意味着如果我们拉下列表,然后增加更多的项目到列表中,这项目将在那,但这个下拉列表不再接受(我们可以通过项目来滚动观察——注释④)。然而,如果我们在第一次拉下下拉列表前将所的项目装入下拉列表,它的大小就会合适。当然,用户在使用时希望看到整个的列表,所以会在下拉列表的状态里对增加项目到选择框里加以特殊的限定。<br>
<br>
④:这一行为显然是一种错误,会Java以后的版本里解决。<br>
<br>
13.11 列表框<br>
列表框与选择框有完全的不同,而不仅仅是当我们在激活选择框时的显示不同,列表框固定在屏幕的指定位置不会改变。另外,一个列表框允许多个选择:如果我们单击在超过一个的项目上,未选择的则表现为高亮度,我们可以选择象我们想要的一样的多。如果我们想察看项目列表,我们可以调用getSelectedItem()来产生一个被选择的项目列表。要想从一个组里删除一个项目,我们必须再一次的单击它。列表框,当然这里有一个问题就是它默认的动作是双击而不是单击。单击从组中增加或删除项目,双击调用action()。解决这个问题的方法是象下面的程序假设的一样重新培训我们的用户。<br>
<br>
609-610页程序<br>
<br>
按下按钮时,按钮增加项目到列表的顶部(因为addItem()的第二个自变量为零)。增加项目到列表框比到选择框更加的合理,因为用户期望去滚动一个列表框(因为这个原因,它有内建的滚动条)但用户并不愿意像在前面的例子里不得不去计算怎样才能滚动到要要的那个项目。<br>
然而,调用action()的唯一方法就是通过双击。如果我们想监视用户在我们的列表中的所作所为(尤其是单击),我们必须提供一个可供选择的方法。<br>
<br>
13.11.1 handleEvent()<br>
到目前为止,我们已使用了action(),现有另一种方法handleEvent()可对每一事件进行尝试。当一个事件发生时,它总是针对单独事件或发生在单独的事件对象上。该对象的handleEvent()方法是自动调用的,并且是被handleEvent()创建并传递到handleEvent()里。默认的handleEvent()(handleEvent()定义在组件里,基础类的所有控件都在AWT里)将像我们以前一样调用action()或其它同样的方法去指明鼠标的活动、键盘活动或者指明移动的焦点。我们将会在本章的后面部分看到。<br>
如果其它的方法-特别是action()-不能满足我们的需要怎么办呢?至于列表框,例如,如果我想捕捉鼠标单击,但action()只响应双击怎么办呢?这个解答是过载handleEvent(),毕竟它是从程序片中得到的,因此可以过载任何非确定的方法。当我们为程序片过载handleEvent()时,我们会得到所有的事件在它们发送出去之前,所以我们不能假设“这里有我的按钮可做的事件,所以我们可以假设按钮被按下了”从它被action()设为真值。在handleEvent()中按钮拥有焦点且某人对它进行分配都是可能的。不论它合理与否,我们可测试这些事件并遵照handleEvent()来进行操作。<br>
为了修改列表样本,使它会响应鼠标的单击,在action()中按钮测试将被过载,但代码会处理的列表将像下面的例子被移进handleEvent()中去:<br>
<br>
611-612页程序<br>
<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -