`

在编辑器中创建一个ScrollPane

 
阅读更多

在实现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作为一种跨平台的编程语言,使得这款文本编辑器具备了“一次编写,到处运行”的特性,可以在多种...

    JTable的初步编程

    对于数据模型,NetBeans会自动为你创建一个`DefaultTableModel`,你可以通过代码编辑器添加和修改数据。 此外,`JTable`还支持各种事件监听,如单元格点击、单元格更改等,这可以通过实现`CellListener`接口或者...

    Java动态Jtable

    Java动态JTable是一个在Swing GUI中创建和管理表格数据的常见应用场景。Swing库中的JTable组件允许开发者创建交互式的表格,展示和编辑数据。在这个例子中,“Java动态JTable”指的是根据需要动态地生成表格列和行的...

    Java目录树控件

    首先,我们需要一个`DefaultMutableTreeNode`对象作为树的根节点,然后递归地添加子节点以代表文件系统中的目录和文件。以下是一个简单的步骤: 1. 创建`DefaultMutableTreeNode`对象作为根节点。 2. 使用`...

    (一)如何使用JTree

    此外,JTree还可以与其他Swing组件结合使用,如JTable,创建复杂的视图,例如在树中选择一个节点后,在表格中显示与该节点相关的详细信息。 总之,JTree是Java Swing中用于展示和操作层次数据的强大工具。通过理解...

    SWT疑难点解答,帮助新手朋友

    SWT,全称Standard Widget Toolkit,是Eclipse项目中的一个开源GUI库,主要用于构建Java应用程序的用户界面。它提供了丰富的控件集合,允许开发者创建与操作系统原生界面风格一致的窗口应用。本文将针对SWT中的一些...

    Java JTable Demo

    在"Demo"中,可能包含了示例代码,演示了如何创建和配置一个具有自定义列宽的JTable,并将其放入JScrollPane。这些代码可能包括了TableModel的实现,列宽的设置,以及将两者整合到JScrollPane的过程。 此外,JTable...

    java中JTable的简单应用

    在Java编程语言中,`JTable`是Swing库中的一个关键组件,用于展示二维数据集,通常在GUI(图形用户界面)中作为表格形式显示。`JTable`是Java Swing框架下的`javax.swing.JTable`类,它允许开发人员创建交互式的表格...

    swing中JTable的简单使用

    在"BookManage"这个文件名中,我们可以推测这是一个图书管理系统的例子。可能包含的功能有添加、删除、编辑书籍信息,以及搜索和排序等功能。在这个系统中,JTable可能会用来显示图书列表,用户可以查看、选择和修改...

    table

    在这个例子中,我们创建了一个具有两列(姓名和年龄)的表格,并添加了两行数据。JTable被放在一个JScrollPane中,以便于滚动查看数据。 8. **自定义功能**:除了基本的展示数据,JTable还支持排序、过滤、分页等...

    JTable实例

    在`JTable`中,我们通常需要创建一个`TableModel`来提供数据,这个模型可以是`DefaultTableModel`或者其他自定义的实现。`TableModel`接口定义了如何与表格交互,包括添加、删除、修改行和获取数据的方法。此外,...

    级联树形菜单

    级联树形菜单在软件开发中是一个常见的交互元素,尤其在数据管理、文件系统或组织结构展示等场景中。在Java编程中实现这样的功能,我们可以利用面向对象的设计思想和数据结构来构建。以下是对这个主题的详细解释: ...

    java控件示例代码(内还有完整系统一个)

    Java控件示例代码是Java GUI编程中的一个重要组成部分,它涉及到如何在Java应用程序中创建、配置和操作用户界面元素。这些控件使得用户能够与程序交互,如输入数据、选择选项或触发事件。在这个名为“java控件实例...

    记事本的java程序代码

    在这个简单的例子中,我们创建了一个JFrame,设置了窗口大小,并添加了一个JTextArea作为文本编辑区。JScrollPane使得文本区域可滚动,而JButton则提供了一个“保存”功能,尽管目前还没有实现其功能。 要使“保存...

    java swing控件演示

    这个示例创建了一个窗口,窗口中有一个按钮和一个带有两列数据的表格。当用户点击按钮时,控制台会打印出一条消息。JTable在JScrollPane中,以便在需要时显示滚动条。 通过以上内容,你可以了解Java Swing的基本...

    Swing展示的文件系统树

    在"Swing展示的文件系统树"这个主题中,我们将深入探讨如何使用`JTree`来创建一个动态显示文件系统的视图。 首先,`JTree`是`javax.swing`包的一部分,它继承自`JComponent`,并实现了`Scrollable`接口,因此可以...

    JTable实例,java表格实例

    Java中的`JTable`是Swing库中的一个关键组件,用于在GUI应用程序中展示数据的二维表格形式。它提供了一种灵活的方式,可以方便地显示、编辑和操作数据。在这个实例中,我们主要探讨`JTable`的使用,以及如何在Java...

    jTable的使用

    **jTable是Java Swing库中的一个组件,用于在应用程序中展示和操作表格数据。它提供了丰富的功能,包括数据编辑、排序、过滤以及自定义显示等。深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的...

    JTable Demo

    在`JTableDemo`中,首先需要创建一个`TableModel`实例,然后用它来初始化`JTable`对象。例如: ```java DefaultTableModel model = new DefaultTableModel(); model.addColumn("列1"); model.addColumn("列2"); ...

    JAVA JTREE JTABLE实例代码

    在这个例子中,我们创建了一个DefaultTableModel,填充了数据并将其关联到JTable。然后,我们将JTable放入一个JScrollPane中,这样当表格内容超出视口时,用户可以通过滚动查看所有数据。 通过jtble和tree这两个...

Global site tag (gtag.js) - Google Analytics