Java Swing组件:Spinner与Tree的使用指南
在Java编程中,Swing组件为开发者提供了丰富的用户界面元素。本文将详细介绍Spinner和Tree这两种组件的使用方法,包括它们的基本概念、创建步骤以及如何获取用户选择的信息。
1. 使用Spinner
Spinner是一个带有两个小箭头的文本字段,用户可以点击箭头来增加或减少文本字段中的值。通常,文本字段包含一个数字,点击箭头会对数字进行递增或递减操作。此外,还可以创建一个显示数组或集合数据的Spinner。
1.1 创建Spinner
要创建一个Spinner控件,可以使用
JSpinner
类。以下是
JSpinner
类的构造函数和方法:
| 构造函数 | 描述 |
| — | — |
|
JSpinner()
| 创建一个默认的Spinner,默认值为0,没有最小值和最大值。 |
|
JSpinner(SpinnerModel model)
| 使用指定的
SpinnerModel
对象创建一个Spinner。 |
| 方法 | 描述 |
|---|---|
void addChangeListener(ChangeListener listener)
|
添加一个
ChangeListener
来监听值的变化事件。
|
int getValue()
| 获取当前的值。 |
void setToolTipText(String text)
| 设置当用户将鼠标悬停在Spinner上时显示的提示文本。 |
1.2 创建不同类型的Spinner
- 默认Spinner :
JSpinner spinner = new JSpinner();
这个Spinner的初始值为0,每次点击箭头时,值会增加或减少1。可以使用以下代码获取当前值:
int value = spinner.getValue();
-
使用
SpinnerNumberModel创建数字Spinner :
JSpinner hours = new JSpinner(
new SpinnerNumberModel(1, 1, 12, 1));
上述代码创建了一个接受1到12之间整数的Spinner,初始值为1。
JSpinner minutes = new JSpinner(
new SpinnerNumberModel(0, 0, 59, 1));
这段代码创建了一个允许用户选择0到59之间数字的Spinner。
-
使用
SpinnerListModel
创建列表Spinner
:
String[] ampmString = {"am", "pm"};
JSpinner ampm = new JSpinner(
new SpinnerListModel(ampmString));
这个Spinner允许用户选择”am”或”pm”。
2. 使用Tree
Tree是一种用于显示层次结构数据的Swing组件,通常以大纲形式呈现。在Java中,可以使用
JTree
类来创建Tree控件。
2.1 相关术语
在创建Tree控件之前,需要了解一些描述Tree元素的术语:
-
节点(Node)
:Tree中的每个元素称为节点。节点必须由实现
TreeNode
接口的类创建,通常可以使用
DefaultMutableTreeNode
类。
-
根节点(Root node)
:Tree的起始节点,每个Tree组件必须有且只有一个根节点。
-
子节点(Child node)
:位于给定节点下方的节点称为该节点的子节点,一个节点可以有多个子节点。
-
父节点(Parent node)
:位于给定节点上方的节点称为该节点的父节点,除根节点外,每个节点都有且只有一个父节点。
-
兄弟节点(Sibling nodes)
:具有相同父节点的节点称为兄弟节点。
-
叶节点(Leaf node)
:没有子节点的节点,表示分支的末端。
-
路径(Path)
:一个节点及其所有祖先节点(即其父节点、父节点的父节点等)一直到根节点的路径。
-
展开节点(Expanded node)
:其子节点可见的节点。
-
折叠节点(Collapsed node)
:其子节点隐藏的节点。
2.2 构建Tree
构建Tree的最简单方法是使用
DefaultMutableTreeNode
类。以下是
DefaultMutableTreeNode
类的构造函数和方法:
| 构造函数 | 描述 |
| — | — |
|
DefaultMutableTreeNode()
| 创建一个空的树节点。 |
|
DefaultMutableTreeNode(Object userObject)
| 创建一个包含指定用户对象的树节点。 |
| 方法 | 描述 |
|---|---|
void add(TreeNode child)
| 添加一个子节点。 |
TreeNode getFirstChild()
| 获取该节点的第一个子节点。 |
DefaultMutableTreeNode getNextSibling()
| 获取下一个兄弟节点。 |
TreeNode getParent()
| 获取该节点的父节点。 |
Object getUserObject()
| 获取该节点的用户对象。 |
以下是一个构建Tree的示例,该Tree列出了三个经典电视剧的衍生剧:
graph TD;
A[Famous Spinoffs] --> B[The Andy Griffith Show];
B --> C[Gomer Pyle, U.S.M.C.];
B --> D[Mayberry R.F.D.];
A --> E[All In the Family];
E --> F[The Jeffersons];
F --> G[Checking In];
E --> H[Maude];
H --> I[Good Times];
E --> J[Gloria];
E --> K[Archie Bunker’s Place];
A --> L[Happy Days];
L --> M[Mork and Mindy];
L --> N[Laverne and Shirley];
L --> O[Joanie Loves Chachi];
以下是构建该Tree的代码:
// 声明变量
DefaultMutableTreeNode andy, archie, happy, george, maude;
// 创建根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Famous Spinoffs");
// 创建辅助方法
private DefaultMutableTreeNode makeShow(String title, DefaultMutableTreeNode parent) {
DefaultMutableTreeNode show = new DefaultMutableTreeNode(title);
parent.add(show);
return show;
}
// 创建节点
andy = makeShow("The Andy Griffith Show", root);
makeShow("Gomer Pyle, U.S.M.C.", andy);
makeShow("Mayberry R.F.D.", andy);
archie = makeShow("All In the Family", root);
george = makeShow("The Jeffersons", archie);
makeShow("Checking In", george);
maude = makeShow("Maude", archie);
makeShow("Good Times", maude);
makeShow("Gloria", archie);
makeShow("Archie Bunker’s Place", archie);
happy = makeShow("Happy Days", root);
makeShow("Mork and Mindy", happy);
makeShow("Laverne and Shirley", happy);
makeShow("Joanie Loves Chachi", happy);
3. 创建JTree组件
使用
JTree
类来创建一个显示Tree节点的组件。以下是
JTree
类的关键构造函数和方法:
| 构造函数 | 描述 |
| — | — |
|
JTree()
| 创建一个空的Tree,不太实用。 |
|
JTree(TreeNode root)
| 创建一个显示从指定节点开始的Tree的组件。 |
| 方法 | 描述 |
|---|---|
void addTreeSelectionListener(TreeSelectionListener listener)
|
添加一个
TreeSelectionListener
来监听树选择事件。
|
Object getLastSelectedPathComponent()
| 获取当前选中的节点。 |
TreeSelectionModel getSelectionModel()
| 获取Tree的选择模型。 |
void setVisibleRowCount(int count)
| 设置显示中可见的行数。 |
以下是创建
JTree
组件的步骤:
1. 声明一个
JTree
变量作为类的实例变量:
JTree tree1;
-
在框架构造函数中调用
JTree构造函数创建Tree组件,并传入要显示的Tree的根节点:
tree1 = new JTree(root);
- 限制用户只能选择单个节点:
tree1.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
- 设置可见行数:
tree1.setVisibleRowCount(12);
- 将Tree组件添加到滚动面板中,然后将滚动面板添加到框架中:
JScrollPane scroll = new JScrollPane(tree1);
JPanel panel1 = new JPanel();
panel1.add(scroll);
this.add(panel1);
4. 获取选中的节点
要确定Tree控件中当前选中的节点,可以使用
getLastSelectedPathComponent
方法。以下是一个示例:
Object o = tree1.getLastSelectedPathComponent();
DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
如果需要在用户选择节点时立即响应,可以安装一个
TreeSelectionListener
。以下是一个示例:
private class TreeListener implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) {
Object o = tree1.getLastSelectedPathComponent();
DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
String title = (String) show.getUserObject();
showName.setText(title);
}
}
tree1.addTreeSelectionListener(new TreeListener());
5. 完整示例代码
以下是一个完整的程序,创建了一个包含Tree的框架,用户可以从Tree中选择一个节目,选中节目的标题将显示在Tree下方的标签中:
import javax.swing.*;
import java.awt.event.*;
import javax.swing.tree.*;
import javax.swing.event.*;
public class SpinOffs extends JFrame {
public static void main(String [] args) {
new SpinOffs();
}
private JTree tree1;
private DefaultTreeModel model;
private JLabel showName;
public SpinOffs() {
this.setSize(225, 325);
this.setTitle("Famous Spinoffs");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel1 = new JPanel();
DefaultMutableTreeNode root, andy, archie, happy, george, maude;
root = new DefaultMutableTreeNode("Famous Spin-offs");
andy = makeShow("The Andy Griffith Show", root);
makeShow("Gomer Pyle, U.S.M.C.", andy);
makeShow("Mayberry R.F.D.", andy);
archie = makeShow("All In the Family", root);
george = makeShow("The Jeffersons", archie);
makeShow("Checking In", george);
maude = makeShow("Maude", archie);
makeShow("Good Times", maude);
makeShow("Gloria", archie);
makeShow("Archie Bunker’s Place", archie);
happy = makeShow("Happy Days", root);
makeShow("Mork and Mindy", happy);
makeShow("Laverne and Shirley", happy);
makeShow("Joanie Loves Chachi", happy);
tree1 = new JTree(root);
tree1.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree1.setVisibleRowCount(12);
tree1.addTreeSelectionListener(new TreeListener());
JScrollPane scroll = new JScrollPane(tree1);
panel1.add(scroll);
showName = new JLabel();
panel1.add(showName);
this.add(panel1);
this.setVisible(true);
}
private DefaultMutableTreeNode makeShow(String title, DefaultMutableTreeNode parent) {
DefaultMutableTreeNode show = new DefaultMutableTreeNode(title);
parent.add(show);
return show;
}
private class TreeListener implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) {
Object o = tree1.getLastSelectedPathComponent();
DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
String title = (String) show.getUserObject();
showName.setText(title);
}
}
}
通过以上步骤,你可以在Java程序中轻松使用Spinner和Tree组件,为用户提供丰富的交互体验。希望本文对你有所帮助!
以上就是关于Java Swing中Spinner和Tree组件的详细介绍,涵盖了从创建到使用的各个方面。通过这些示例代码,你可以更好地理解和应用这些组件,为你的Java应用程序增添更多功能。
Java Swing组件:Spinner与Tree的使用指南
5. 代码分析与关键技术点解析
在上述完整示例代码中,有几个关键的技术点需要深入分析,这有助于我们更好地理解和运用
Spinner
与
Tree
组件。
5.1
Spinner
的使用要点
-
Spinner的构造函数选择 :根据需求选择合适的构造函数。如果只是简单的整数选择,使用默认构造函数JSpinner()即可;若需要控制取值范围和步长,则使用JSpinner(SpinnerModel model),并搭配SpinnerNumberModel或SpinnerListModel。 -
获取
Spinner的值 :通过getValue()方法可以方便地获取Spinner当前的值。例如:
JSpinner spinner = new JSpinner();
int value = spinner.getValue();
5.2
Tree
的构建与操作
-
DefaultMutableTreeNode的运用 :DefaultMutableTreeNode是构建树结构的基础类。通过它的构造函数可以创建节点,并使用add()方法添加子节点。如:
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Famous Spinoffs");
DefaultMutableTreeNode andy = new DefaultMutableTreeNode("The Andy Griffith Show");
root.add(andy);
-
JTree的配置 :创建JTree时,需要传入根节点。同时,可以通过getSelectionModel().setSelectionMode()方法限制用户的选择模式,通过setVisibleRowCount()方法设置可见行数。示例如下:
JTree tree1 = new JTree(root);
tree1.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree1.setVisibleRowCount(12);
-
监听树节点的选择事件
:使用
TreeSelectionListener可以监听用户对树节点的选择操作。当用户选择节点时,valueChanged()方法会被触发,我们可以在该方法中获取选中节点的信息。代码如下:
private class TreeListener implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) {
Object o = tree1.getLastSelectedPathComponent();
DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
String title = (String) show.getUserObject();
showName.setText(title);
}
}
tree1.addTreeSelectionListener(new TreeListener());
6. 实际应用场景与拓展
Spinner
和
Tree
组件在实际开发中有广泛的应用场景,下面列举一些常见的场景及拓展思路。
6.1
Spinner
的应用场景
-
时间选择器
:如示例中所示,使用多个
Spinner可以构建一个简单的时间选择器,分别选择小时、分钟和上下午。 -
数量选择
:在购物车、点餐系统等场景中,用户可以通过
Spinner选择商品的数量。
6.2
Tree
的应用场景
-
文件目录结构展示
:可以使用
Tree组件展示文件系统的目录结构,方便用户浏览和操作文件。 -
组织架构展示
:在企业管理系统中,使用
Tree展示公司的组织架构,员工可以清晰地看到部门和人员的层级关系。
6.3 拓展思路
-
自定义节点样式
:可以通过继承
DefaultTreeCellRenderer类,重写getTreeCellRendererComponent()方法来自定义树节点的显示样式,如更改字体、颜色、图标等。 - 动态更新树结构 :在程序运行过程中,可以根据用户的操作动态添加、删除或修改树节点。例如,当用户点击某个按钮时,在树中添加一个新的子节点。
7. 总结
通过本文的介绍,我们详细了解了
Spinner
和
Tree
这两种Java Swing组件的使用方法。从基本概念到具体的创建步骤,再到关键技术点的分析和实际应用场景的拓展,我们对这两个组件有了更深入的认识。
在实际开发中,合理运用
Spinner
和
Tree
组件可以为用户提供更加友好和便捷的交互体验。同时,通过对代码的深入理解和拓展,我们可以根据具体需求对组件进行定制化开发,满足不同项目的需求。
以下是一个简单的流程图,总结了创建
JTree
组件的主要步骤:
graph LR;
A[声明JTree变量] --> B[创建根节点];
B --> C[构建树结构];
C --> D[创建JTree组件并传入根节点];
D --> E[配置JTree组件];
E --> F[添加滚动面板和选择监听器];
F --> G[添加到框架中显示];
希望本文能够帮助你更好地掌握
Spinner
和
Tree
组件的使用,为你的Java开发工作带来更多的便利和创意。
超级会员免费看
2531

被折叠的 条评论
为什么被折叠?



