在实现UI编辑器的时候,由于本身有些UI组件是一个窗体类型的组件。那么我们在编辑器中画的时候也需要画窗体,侧滑条之类的都得备齐了。
gef窗体的构造元素:
1.ScrollPane:一个架子,有两个滑调,负责显示窗体的最外层边框,如侧滑条。
2.Viewport:视口,本来把有很多内容,但是视口里面就只能看到一部分,其它部分的内容被隐藏。
3.IFigure:视口里面的内容,它是真实的,大而全的。Viewport永远只显示它的一部分,而通过滑调来改变位置。
gef提供的大纲视图的鹰眼功能就是通过这套机制实现的。
ScrollPane:在draw2d中ScrollPane是用于实现由侧滑条的窗体,它本身不是很复杂。有两个ScrollBar是纵横两个滑条,在构建的时候,可以设置滑调的显示状态,是永不出现,永远出现,还是自动出现三种状态。
ScrollPane:
1.可以单独设置横向或纵向的滑调的显示状态
2.可以设置scrollTo:就是我们鼠标拉动滑块的位置,也可以直接设定值
3.可以setContents:这个是设置内容,其实就是上述的3,窗体里面的所有内容。
4.可以设置Viewport:就是上述2
5.作为一个figure,scrollpane的布局是ScrollPaneLayout,ScrollPaneLayout里面侧重于计算滑条的位置,而不关注容器内部的内容。
6.ScrollPaneSolver:这个类是用来计算ScrollPane里面显示的内容的。
1)Result:ScrollPaneSolver里面的一个静态常量,保存窗体显示的信息。是否显示滑调H和V,viewportArea,insets。
7.RangeModel:在创建ScrollBar的时候,会构造一个RangeModel对象,这个对象保存的是ScrollBar的一些信息。Maximum,Minimum,Value,Extent。Value:是滑块的位置。Extent:程度,没搞清楚啥意思。
在ScrollPane中RangeModel来自Viewport。
Viewport:Viewport实现了一个PropertyChangeListener监听
1.提供了两个默认的RangeModel,并提供给ScrollPane
2.ViewportLayout:此layout主要计算窗体显示内容的区域
3.实现了PropertyChangeListener,当RangeModel的值改变的时候,会刷新内容:
public void propertyChange(PropertyChangeEvent event) {
if (event.getSource() instanceof RangeModel) {
if (RangeModel.PROPERTY_VALUE.equals(event.getPropertyName())) {
if (!ignoreScroll) {
localRevalidate();
if (useGraphicsTranslate()) {
repaint();
fireMoved();
}
}
firePropertyChange(PROPERTY_VIEW_LOCATION, event.getOldValue(),
event.getNewValue());
}
}
}
总结:
1.根据上述,可以知道,创建一个ScrollPane的时候,必须为其传人一个Viewport对象,因为ScrollPane的滑调的RangeModel是由Viewport提供的。
2.要用setContents方法为ScrollPane设置内容,而不是add,ScrollPane是要把内容传入Viewport的,当然也可以把内容设置给Viewport。
3.ScrollPane是一个容器,它里面有一个Viewport容器,Viewport里面装的才是我们实际的内容。
例子:
public static IFigure createPane(){
ScrollPane scrollpane = new ScrollPane();
scrollpane.setLocation(new Point(10, 10));
scrollpane.setSize(new Dimension(100, 100));
//设置纵向的滑条不显示
scrollpane.setVerticalScrollBarVisibility(ScrollPane.NEVER);
scrollpane.setViewport(new Viewport());
Panel figure = new Panel();
// figure.setBorder(new LineBorder(5));
figure.setOpaque(false);
//当内容的Size大于ScrollPane的size就会出现滑条
figure.setSize(new Dimension(210, 100));
figure.setBackgroundColor(ColorConstants.red);
scrollpane.setContents(figure);
return scrollpane;
}
分享到:
相关推荐
在计算机科学领域,文本编辑器是至关重要的工具,无论是编程、代码调试还是文档撰写,它都能提供高效的工作环境。Java作为一种跨平台的编程语言,使得这款文本编辑器具备了“一次编写,到处运行”的特性,可以在多种...
对于数据模型,NetBeans会自动为你创建一个`DefaultTableModel`,你可以通过代码编辑器添加和修改数据。 此外,`JTable`还支持各种事件监听,如单元格点击、单元格更改等,这可以通过实现`CellListener`接口或者...
Java动态JTable是一个在Swing GUI中创建和管理表格数据的常见应用场景。Swing库中的JTable组件允许开发者创建交互式的表格,展示和编辑数据。在这个例子中,“Java动态JTable”指的是根据需要动态地生成表格列和行的...
首先,我们需要一个`DefaultMutableTreeNode`对象作为树的根节点,然后递归地添加子节点以代表文件系统中的目录和文件。以下是一个简单的步骤: 1. 创建`DefaultMutableTreeNode`对象作为根节点。 2. 使用`...
此外,JTree还可以与其他Swing组件结合使用,如JTable,创建复杂的视图,例如在树中选择一个节点后,在表格中显示与该节点相关的详细信息。 总之,JTree是Java Swing中用于展示和操作层次数据的强大工具。通过理解...
SWT,全称Standard Widget Toolkit,是Eclipse项目中的一个开源GUI库,主要用于构建Java应用程序的用户界面。它提供了丰富的控件集合,允许开发者创建与操作系统原生界面风格一致的窗口应用。本文将针对SWT中的一些...
在"Demo"中,可能包含了示例代码,演示了如何创建和配置一个具有自定义列宽的JTable,并将其放入JScrollPane。这些代码可能包括了TableModel的实现,列宽的设置,以及将两者整合到JScrollPane的过程。 此外,JTable...
在Java编程语言中,`JTable`是Swing库中的一个关键组件,用于展示二维数据集,通常在GUI(图形用户界面)中作为表格形式显示。`JTable`是Java Swing框架下的`javax.swing.JTable`类,它允许开发人员创建交互式的表格...
在"BookManage"这个文件名中,我们可以推测这是一个图书管理系统的例子。可能包含的功能有添加、删除、编辑书籍信息,以及搜索和排序等功能。在这个系统中,JTable可能会用来显示图书列表,用户可以查看、选择和修改...
在这个例子中,我们创建了一个具有两列(姓名和年龄)的表格,并添加了两行数据。JTable被放在一个JScrollPane中,以便于滚动查看数据。 8. **自定义功能**:除了基本的展示数据,JTable还支持排序、过滤、分页等...
在`JTable`中,我们通常需要创建一个`TableModel`来提供数据,这个模型可以是`DefaultTableModel`或者其他自定义的实现。`TableModel`接口定义了如何与表格交互,包括添加、删除、修改行和获取数据的方法。此外,...
级联树形菜单在软件开发中是一个常见的交互元素,尤其在数据管理、文件系统或组织结构展示等场景中。在Java编程中实现这样的功能,我们可以利用面向对象的设计思想和数据结构来构建。以下是对这个主题的详细解释: ...
Java控件示例代码是Java GUI编程中的一个重要组成部分,它涉及到如何在Java应用程序中创建、配置和操作用户界面元素。这些控件使得用户能够与程序交互,如输入数据、选择选项或触发事件。在这个名为“java控件实例...
在这个简单的例子中,我们创建了一个JFrame,设置了窗口大小,并添加了一个JTextArea作为文本编辑区。JScrollPane使得文本区域可滚动,而JButton则提供了一个“保存”功能,尽管目前还没有实现其功能。 要使“保存...
这个示例创建了一个窗口,窗口中有一个按钮和一个带有两列数据的表格。当用户点击按钮时,控制台会打印出一条消息。JTable在JScrollPane中,以便在需要时显示滚动条。 通过以上内容,你可以了解Java Swing的基本...
在"Swing展示的文件系统树"这个主题中,我们将深入探讨如何使用`JTree`来创建一个动态显示文件系统的视图。 首先,`JTree`是`javax.swing`包的一部分,它继承自`JComponent`,并实现了`Scrollable`接口,因此可以...
Java中的`JTable`是Swing库中的一个关键组件,用于在GUI应用程序中展示数据的二维表格形式。它提供了一种灵活的方式,可以方便地显示、编辑和操作数据。在这个实例中,我们主要探讨`JTable`的使用,以及如何在Java...
**jTable是Java Swing库中的一个组件,用于在应用程序中展示和操作表格数据。它提供了丰富的功能,包括数据编辑、排序、过滤以及自定义显示等。深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的...
在`JTableDemo`中,首先需要创建一个`TableModel`实例,然后用它来初始化`JTable`对象。例如: ```java DefaultTableModel model = new DefaultTableModel(); model.addColumn("列1"); model.addColumn("列2"); ...
在这个例子中,我们创建了一个DefaultTableModel,填充了数据并将其关联到JTable。然后,我们将JTable放入一个JScrollPane中,这样当表格内容超出视口时,用户可以通过滚动查看所有数据。 通过jtble和tree这两个...