Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
zetcode-zh
提交
c83ebd6e
Z
zetcode-zh
项目概览
OpenDocCN
/
zetcode-zh
9 个月 前同步成功
通知
2
Star
157
Fork
40
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Z
zetcode-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
c83ebd6e
编写于
6月 21, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-06-21 10:53:37
上级
01f48c84
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
36 addition
and
36 deletion
+36
-36
docs/gui/171.md
docs/gui/171.md
+2
-2
docs/gui/173.md
docs/gui/173.md
+10
-10
docs/gui/174.md
docs/gui/174.md
+1
-1
docs/gui/175.md
docs/gui/175.md
+5
-5
docs/gui/176.md
docs/gui/176.md
+3
-3
docs/gui/178.md
docs/gui/178.md
+4
-4
docs/gui/179.md
docs/gui/179.md
+2
-2
docs/gui/180.md
docs/gui/180.md
+2
-2
docs/gui/181.md
docs/gui/181.md
+1
-1
docs/gui/330.md
docs/gui/330.md
+1
-1
docs/gui/332.md
docs/gui/332.md
+2
-2
docs/gui/333.md
docs/gui/333.md
+1
-1
docs/gui/61.md
docs/gui/61.md
+1
-1
docs/gui/80.md
docs/gui/80.md
+1
-1
未找到文件。
docs/gui/171.md
浏览文件 @
c83ebd6e
...
...
@@ -67,7 +67,7 @@ grid .fr.erButton
```
我们创建一个错误按钮,它调用
onError
过程。 在方法内部,我们显示错误消息对话框。 该按钮将放置在网格的第一个单元格中。
`ttk`
名称空间内的小部件为主题。 就功能而言,
`button`
和
`ttk::button`
是相同的按钮。 不同之处在于我们可以将主题应用于后者。
我们创建一个错误按钮,它调用
`onError`
过程。 在方法内部,我们显示错误消息对话框。 该按钮将放置在网格的第一个单元格中。
`ttk`
名称空间内的小部件为主题。 就功能而言,
`button`
和
`ttk::button`
是相同的按钮。 不同之处在于我们可以将主题应用于后者。
```
proc onError {} {
...
...
@@ -214,7 +214,7 @@ proc onSelect { label } {
```
我们使用
`tk_getOpenFile`
命令显示对话框。 我们使用
`-filetypes`
选项应用文件过滤器。 所选文件名存储在
file
变量中。
`configure`
命令用于更改标签的文本。
我们使用
`tk_getOpenFile`
命令显示对话框。 我们使用
`-filetypes`
选项应用文件过滤器。 所选文件名存储在
`file`
变量中。
`configure`
命令用于更改标签的文本。
![
tk_getOpenFile
](
img/4ad3eb6d018392a91ed9b981e768f262.jpg
)
...
...
docs/gui/173.md
浏览文件 @
c83ebd6e
#
Nibbles
#
贪食蛇
> 原文: [http://zetcode.com/gui/tcltktutorial/nibbles/](http://zetcode.com/gui/tcltktutorial/nibbles/)
在 Tcl/Tk 教程的这一部分中,我们将创建一个
Nibbles
游戏克隆。
在 Tcl/Tk 教程的这一部分中,我们将创建一个
贪食蛇
游戏克隆。
Nibbles
是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每次吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。
贪食蛇
是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每次吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。
## 开发
蛇的每个关节的大小为 10px。 蛇由光标键控制。 最初,蛇具有三个关节。 游戏立即开始。 游戏结束后,我们在窗口中心显示“
Game Over
”消息。
蛇的每个关节的大小为 10px。 蛇由光标键控制。 最初,蛇具有三个关节。 游戏立即开始。 游戏结束后,我们在窗口中心显示“
`Game Over`
”消息。
我们使用
`canvas`
小部件来创建游戏。 游戏中的对象是图像。 我们使用画布命令创建图像项。 我们使用画布命令使用标签在画布上查找项目并进行碰撞检测。
...
...
@@ -292,7 +292,7 @@ proc createObjects {} {
```
在
createObjects 过程中,我们在画布上创建游戏对象。 这些是帆布物品。 它们被赋予初始的 x,y 坐标。
`-image`
选项提供要显示的图像。 -anchor 选项设置为 nw
; 这样,画布项目的坐标就是项目的左上角。 如果我们希望能够在根窗口的边框旁边显示图像,这很重要。 如果您不理解我们的意思,请尝试删除锚点选项。
`-tag`
选项用于识别画布上的项目。 一个标签可用于多个画布项目。
在
`createObjects`
过程中,我们在画布上创建游戏对象。 这些是帆布物品。 它们被赋予初始的 x,y 坐标。
`-image`
选项提供要显示的图像。
`-anchor`
选项设置为
`nw`
; 这样,画布项目的坐标就是项目的左上角。 如果我们希望能够在根窗口的边框旁边显示图像,这很重要。 如果您不理解我们的意思,请尝试删除锚点选项。
`-tag`
选项用于识别画布上的项目。 一个标签可用于多个画布项目。
`checkApple`
过程检查蛇是否击中了苹果对象。 如果是这样,我们添加另一个蛇形接头并称为
`locateApple`
。
...
...
@@ -399,7 +399,7 @@ set r [expr round(rand() * $::RAND_POS)]
```
我们得到一个从 0 到
RAND_POS-1
的随机数。
我们得到一个从 0 到
`RAND_POS-1`
的随机数。
```
set ::apple_x [expr $r * $::DOT_SIZE]
...
...
@@ -408,7 +408,7 @@ set ::apple_y [expr $r * $::DOT_SIZE]
```
这些行设置了
apple
对象的 x,y 坐标。
这些行设置了
`apple`
对象的 x,y 坐标。
在
`onKeyPressed`
程序中,我们确定所按下的键。
...
...
@@ -425,7 +425,7 @@ if { $a1 && $a2 } {
```
如果按左光标键,则将
left 变量设置为 true
。 在
`doMove`
过程中使用此变量来更改蛇对象的坐标。 还要注意,当蛇向右行驶时,我们不能立即向左转。
如果按左光标键,则将
`left`
变量设置为
`true`
。 在
`doMove`
过程中使用此变量来更改蛇对象的坐标。 还要注意,当蛇向右行驶时,我们不能立即向左转。
```
proc onTimer {} {
...
...
@@ -442,7 +442,7 @@ proc onTimer {} {
```
每
`DELAY`
ms,将调用
onTimer 过程。 如果我们参与了游戏,我们将调用三个构建游戏逻辑的过程。 否则,游戏结束。 计时器基于 after
命令,该命令仅在
`DELAY`
ms 之后调用一次过程。 要重复调用计时器,我们递归调用
`onTimer`
过程。
每
`DELAY`
ms,将调用
`onTimer`
过程。 如果我们参与了游戏,我们将调用三个构建游戏逻辑的过程。 否则,游戏结束。 计时器基于
`after`
命令,该命令仅在
`DELAY`
ms 之后调用一次过程。 要重复调用计时器,我们递归调用
`onTimer`
过程。
```
proc gameOver {} {
...
...
@@ -463,4 +463,4 @@ proc gameOver {} {
Figure: Nibbles
这是用 Tcl/Tk 创建的 Nibbles 电脑游戏。
\ No newline at end of file
这是用 Tcl/Tk 创建的贪食蛇电脑游戏。
\ No newline at end of file
docs/gui/174.md
浏览文件 @
c83ebd6e
...
...
@@ -27,4 +27,4 @@
## 相关教程和电子书
有
[
Advanced Java Swing 电子书
](
/ebooks/advancedjavaswing/
)
,
[
Java Swing 教程
](
/tutorials/javaswingtutorial/
)
,
[
JavaFX 教程
](
/gui/javafx/
)
和
[
Java 教程
](
/lang/java/
)
。
\ No newline at end of file
有
[
高级 Java Swing 电子书
](
/ebooks/advancedjavaswing/
)
,
[
Java Swing 教程
](
/tutorials/javaswingtutorial/
)
,
[
JavaFX 教程
](
/gui/javafx/
)
和
[
Java 教程
](
/lang/java/
)
。
\ No newline at end of file
docs/gui/175.md
浏览文件 @
c83ebd6e
...
...
@@ -87,7 +87,7 @@ public class CenterWindowEx {
```
本示例在屏幕中央显示一个
250x200
像素的窗口。 在每个 SWT 应用中,都有两个重要的类:
`Display`
和
`Shell`
。
`Display`
是 SWT 与基础 OS 之间的连接。 它实现了事件循环并提供了有关操作系统的信息。
`Shell`
代表一个窗口。 有顶级的外壳; 这些将
`Display`
作为父项。 其他外壳称为辅助外壳。
本示例在屏幕中央显示一个
`250x200`
像素的窗口。 在每个 SWT 应用中,都有两个重要的类:
`Display`
和
`Shell`
。
`Display`
是 SWT 与基础 OS 之间的连接。 它实现了事件循环并提供了有关操作系统的信息。
`Shell`
代表一个窗口。 有顶级的外壳; 这些将
`Display`
作为父项。 其他外壳称为辅助外壳。
```
Shell shell = new Shell(display);
...
...
@@ -126,7 +126,7 @@ while (!shell.isDisposed()) {
```
这些行启动事件
mainloop
。
这些行启动事件
主循环
。
```
Rectangle bds = shell.getDisplay().getBounds();
...
...
@@ -236,7 +236,7 @@ Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.CENTER);
```
style
参数指定外壳的行为。 传递
`SWT.CENTER`
选项可使外壳位于窗口的中心。
`SWT.SHELL_TRIM`
在窗口上装饰。 它启用标题和标题栏按钮,并使窗口可调整大小。 这是外壳的默认样式。
`style`
参数指定外壳的行为。 传递
`SWT.CENTER`
选项可使外壳位于窗口的中心。
`SWT.SHELL_TRIM`
在窗口上装饰。 它启用标题和标题栏按钮,并使窗口可调整大小。 这是外壳的默认样式。
```
shell.setToolTipText("This is a window");
...
...
@@ -373,7 +373,7 @@ quitBtn.addSelectionListener(new SelectionAdapter() {
```
我们为按钮添加一个选择
侦
听器。 当我们单击按钮时,将调用
`widgetSelected()`
方法。 在此方法内部,我们释放 OS 资源并退出应用。
我们为按钮添加一个选择
监
听器。 当我们单击按钮时,将调用
`widgetSelected()`
方法。 在此方法内部,我们释放 OS 资源并退出应用。
![
Quit button
](
img/c4d1dc44e82b0dec8964ff7a4408fc15.jpg
)
...
...
@@ -467,7 +467,7 @@ btn.addListener(SWT.Selection, event -> System.out.println("Button clicked"));
```
激活后,该按钮会将消息打印到控制台。 lambda 表达式用于向按钮添加
侦
听器。
激活后,该按钮会将消息打印到控制台。 lambda 表达式用于向按钮添加
监
听器。
目前,有三种激活按钮的方式:单击鼠标左键,
`Alt`
+
`B`
快捷方式以及
`空格键`
按钮具有焦点)。
...
...
docs/gui/176.md
浏览文件 @
c83ebd6e
...
...
@@ -95,7 +95,7 @@ btn1.setBounds(20, 50, 80, 30);
```
`setBounds()`
方法有两件事:将按钮定位在
x = 20 和 y = 50,并将按钮的大小设置为 width = 80 和 height = 30
。
`setBounds()`
方法有两件事:将按钮定位在
`x = 20`
和
`y = 50`
,并将按钮的大小设置为
`width = 80`
和
`height = 30`
。
```
button2.setSize(80, 30);
...
...
@@ -482,7 +482,7 @@ FormData cancelData = new FormData(80, 30);
```
取消按钮的大小为
80x30
。
取消按钮的大小为
`80x30`
。
```
cancelData.right = new FormAttachment(98);
...
...
@@ -978,7 +978,7 @@ btn.setLayoutData(gd);
```
在
for
循环内,我们创建按钮并将其放入网格中。 通过
`widthHint`
和
`heightHint`
属性,我们可以设置按钮的首选大小。
在
`for`
循环内,我们创建按钮并将其放入网格中。 通过
`widthHint`
和
`heightHint`
属性,我们可以设置按钮的首选大小。
![
Calculator skeleton
](
img/9e487db6a0d1def00b90e87475b13e09.jpg
)
...
...
docs/gui/178.md
浏览文件 @
c83ebd6e
...
...
@@ -224,7 +224,7 @@ cb.addListener(SWT.Selection, event -> onButtonSelect(cb));
```
我们向按钮的
`SWT.Selection`
事件类型添加一个
侦
听器对象。
我们向按钮的
`SWT.Selection`
事件类型添加一个
监
听器对象。
```
private void onButtonSelect(Button cb) {
...
...
@@ -348,7 +348,7 @@ spinner.addListener(SWT.Selection, event -> onSelected(spinner));
```
等待微调器选择事件的
侦
听器已添加到控件中。 触发事件时,将调用
`onSelected()`
方法。
等待微调器选择事件的
监
听器已添加到控件中。 触发事件时,将调用
`onSelected()`
方法。
```
private void onSelected(Spinner spinner) {
...
...
@@ -526,7 +526,7 @@ list.addListener(SWT.Selection, event -> onListItemSelect(list));
```
我们将选择
侦
听器添加到
`List`
小部件。 在列表选择事件中,将调用
`onListItemSelect()`
方法。
我们将选择
监
听器添加到
`List`
小部件。 在列表选择事件中,将调用
`onListItemSelect()`
方法。
```
FormData listData = new FormData();
...
...
@@ -731,7 +731,7 @@ slider.addListener(SWT.Selection, event -> onSelection(slider));
```
侦
听器已添加到滑块小部件。
监
听器已添加到滑块小部件。
```
int value = slider.getSelection();
...
...
docs/gui/179.md
浏览文件 @
c83ebd6e
...
...
@@ -130,7 +130,7 @@ for (int i = 0; i < titles.length; i++) {
```
在此
for
循环中,我们创建表列。
`TableColumn`
的实例表示表窗口小部件中的一列。
`setWidth()`
设置列的宽度,
`setText()`
方法设置列的名称。
在此
`for`
循环中,我们创建表列。
`TableColumn`
的实例表示表窗口小部件中的一列。
`setWidth()`
设置列的宽度,
`setText()`
方法设置列的名称。
```
for (int i = 0; i < 15; i++) {
...
...
@@ -356,7 +356,7 @@ table.addListener(SWT.Selection, event -> onTableItemSelected(table));
```
选择
侦
听器将添加到表中。 每当选择表格项目时,都会调用
`onTableItemSelected()`
。
选择
监
听器将添加到表中。 每当选择表格项目时,都会调用
`onTableItemSelected()`
。
```
private void onTableItemSelected(Table table) {
...
...
docs/gui/180.md
浏览文件 @
c83ebd6e
...
...
@@ -203,7 +203,7 @@ shell.addListener(SWT.Close, event -> doShowMessageBox(event));
```
我们将
侦
听器挂钩到
`SWT.Close`
事件类型。
我们将
监
听器挂钩到
`SWT.Close`
事件类型。
```
int style = SWT.APPLICATION_MODAL | SWT.ICON_QUESTION | SWT.YES
...
...
@@ -315,7 +315,7 @@ shell.addListener(SWT.MouseDown, event -> onMouseDown());
```
将
`SWT.MouseDown`
事件的鼠标
侦
听器添加到外壳中。 当我们在窗口上按下鼠标按钮时,将调用
`onMouseDown()`
方法。
将
`SWT.MouseDown`
事件的鼠标
监
听器添加到外壳中。 当我们在窗口上按下鼠标按钮时,将调用
`onMouseDown()`
方法。
```
DirectoryDialog dialog = new DirectoryDialog(shell);
...
...
docs/gui/181.md
浏览文件 @
c83ebd6e
...
...
@@ -101,7 +101,7 @@ shell.addListener(SWT.Paint, event -> drawRectangles(event));
```
我们为绘图事件添加了绘图
侦
听器。
我们为绘图事件添加了绘图
监
听器。
```
private void drawRectangles(Event e) {
...
...
docs/gui/330.md
浏览文件 @
c83ebd6e
...
...
@@ -293,7 +293,7 @@ end
```
我们向按钮添加一个动作监听器。
侦
听器终止应用。
我们向按钮添加一个动作监听器。
监
听器终止应用。
![
Quit button
](
img/42d3a3d39c91ef8b5a4eb2ff4aaaf461.jpg
)
...
...
docs/gui/332.md
浏览文件 @
c83ebd6e
...
...
@@ -104,7 +104,7 @@ end
```
在动作
侦
听器内部,我们检查标题是否已设置。 如果有标题,我们将其删除。 如果没有标题,我们设置一个。 这样,我们可以切换标题的可见性。
在动作
监
听器内部,我们检查标题是否已设置。 如果有标题,我们将其删除。 如果没有标题,我们设置一个。 这样,我们可以切换标题的可见性。
![
JCheckBox
](
img/9947edf6429f2a1ccfec517d97280b0f.jpg
)
...
...
@@ -585,7 +585,7 @@ redButton.addActionListener self
```
我们创建一个
`JToggleButton`
组件。 我们向按钮添加一个动作监听器。 动作
侦
听器是 Example 类。 当我们单击 redButton 时,将调用 Example 类的
`actionPerformed`
方法。
我们创建一个
`JToggleButton`
组件。 我们向按钮添加一个动作监听器。 动作
监
听器是 Example 类。 当我们单击 redButton 时,将调用 Example 类的
`actionPerformed`
方法。
```
blueButton.setMaximumSize greenButton.getMaximumSize
...
...
docs/gui/333.md
浏览文件 @
c83ebd6e
...
...
@@ -349,7 +349,7 @@ self.addMouseListener MouseAction.new
```
我们将鼠标
侦听器添加到 Example 类。 鼠标侦
听器是
`MouseAction`
用户定义的类,该类继承自
`MouseAdapter`
。 这是一个便利类,可实现所有五个必需的方法。 方法为空。 除了实现所有五个方法之外,我们仅实现所需的方法。
我们将鼠标
监听器添加到 Example 类。 鼠标监
听器是
`MouseAction`
用户定义的类,该类继承自
`MouseAdapter`
。 这是一个便利类,可实现所有五个必需的方法。 方法为空。 除了实现所有五个方法之外,我们仅实现所需的方法。
```
class MouseAction < MouseAdapter
...
...
docs/gui/61.md
浏览文件 @
c83ebd6e
...
...
@@ -566,7 +566,7 @@ showStatusBarMenuItem.addItemListener((e) -> {
```
`JCheckBoxMenuItem`
是一种特殊的按钮组件。 它实现了
`ItemSelectable`
接口。
`ItemListener`
可用于
侦
听其状态变化。 根据其状态,我们显示或隐藏状态栏。
`JCheckBoxMenuItem`
是一种特殊的按钮组件。 它实现了
`ItemSelectable`
接口。
`ItemListener`
可用于
监
听其状态变化。 根据其状态,我们显示或隐藏状态栏。
![
JCheckBoxMenuItem
](
img/e211ea134eb85e2ae2a46461fd57d631.jpg
)
...
...
docs/gui/80.md
浏览文件 @
c83ebd6e
...
...
@@ -263,7 +263,7 @@ rect.setOnMouseClicked((MouseEvent e) -> {
## 通用处理程序
在下一个示例中,我们创建一个
侦
听所有类型事件的通用事件处理程序。
在下一个示例中,我们创建一个
监
听所有类型事件的通用事件处理程序。
`GenericHandlerEx.java`
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录