Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发行说明了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
使用本课程中的信息和组件操作指南来帮助您完成这些问题和练习。
问题1: 找到最适合以下需求的组件。写下组件的通用名称(例如"frame")并在在线上找到组件的操作指南页面。
问题1a: 一个让用户选择颜色的组件。
回答1a: 颜色选择器
问题1b: 一个显示图标但不对用户点击作出反应的组件。
回答1b: 标签
问题1c: 一个看起来像按钮的组件,当按下时会弹出一个供用户选择的菜单项。
回答1c: 不可编辑的组合框
问题1d: 一个看起来像框架的容器,但通常(与其他类似的容器一起)出现在真正的框架中。
回答1d: 内部框架
问题1e: 一个容器,允许用户确定两个组件如何共享有限的空间。
回答1e: 分割窗格
问题2: 您如何将菜单栏添加到顶级容器(例如JFrame
)中?
回答2: 使用setJMenuBar
方法。
问题3: 您如何指定顶级容器(例如JFrame
或JDialog
)的默认按钮?
回答3: 使用JRootPane
的setDefaultButton
方法(您可以使用RootPaneContainer
接口定义的getRootPane
方法获取顶级容器的根窗格,每个顶级容器都实现了该接口)。
问题4: 您如何启用和禁用组件(例如JButton
)?它是在哪个类中定义的?
回答4: 使用setEnabled
方法,该方法定义在Component
类中。
问题5a: 哪些Swing组件使用了ListSelectionModel
?[提示: 每个接口和类的规范顶部的“Use”链接都会带您到一个页面,显示该接口或类在API中的引用位置。]
回答5a: JList
和JTable
问题5b:这些组件是否使用其他模型来处理组件状态的其他方面?如果是,请列出其他模型的类型。
答案5b:JList
也使用ListModel
来保存列表的数据。JTable
使用TableModel
来保存其数据,并使用TableColumnModel
来管理表格的列。
问题6:哪种类型的模型保存文本组件的内容?
答案6:Document
练习1:编写一个带有GUI界面的程序,界面如下所示。将主方法放在名为MyDemo1
的类中。
答案1:请参见MyDemo1.java
。以下是添加粗体和斜体文本的代码:
JLabel label = new JLabel("My Demo"); frame.getContentPane().add(BorderLayout.CENTER, label); label.setFont(label.getFont().deriveFont(Font.ITALIC | Font.BOLD)); label.setHorizontalAlignment(JLabel.CENTER)
练习2:将MyDemo1.java
复制为MyDemo2.java
。在MyDemo2
中添加一个菜单栏。
答案2:请参见MyDemo2.java
。可以使用以下代码来实现菜单栏:
JMenu menu = new JMenu("菜单"); JMenuBar mb = new JMenuBar(); mb.add(menu); frame.setJMenuBar(mb);
练习3:将MyDemo1.java
复制为MyDemo3.java
。在MyDemo3.java
中添加一个按钮(JButton
),并将其设置为默认按钮。
答案3:请参见MyDemo3.java
。以下是添加按钮并将其设置为默认按钮的代码:
JButton b = new JButton("一个按钮"); frame.getContentPane().add(BorderLayout.PAGE_END, b); frame.getRootPane().setDefaultButton(b);