这是我做过的一点研究,下面的答案是由@StanislavL给我的
查看教程http://java-sl.com/editor_kit_tutorial_views.html
关于方法
protected void layoutMajorAxis(int targetSpan,int axis,int [] offset,int [] spans)
事实上,它定义了儿童的位置和范围。 让我们考虑一个段落的layoutMajorAxis。所以我们布置段落的行 targetSpan是我们想要达到的空间量(在我们的例子中是段落高度,它可以是例如页面高度或表格单元格高度)。让我们考虑简单的情况,高度是JEditorPane的宽度100像素。 所以我们应该计算每一行的开始位置(偏移量)以及它需要多少空间(跨度)。 轴是Y_AXIS
所以,如果我们为段落调用super.layoutMajorAxis然后将偏移更改为5,10,15等。我们将重叠行。
但是如果我们考虑layoutMajorAxis作为段落的行(例如我们的文本包含粗体字,那么该行有3个子元素)。
在这种情况下,targetSpan是所有者段落的宽度,偏移是每个元素跨度的开始是每个文本元素的大小。
问题: 1. offsets.length方法给出了偏移'数组'中'elements'的数量,就像array.length方法那样(第一个'element'是索引0)或者它是offset []数组的总和。例如,在链接上的示例之后,Y轴上的偏移是{10,30,50},使得offsets.length = 10 + 30 + 50,即90?或者它会根据您所指的特定子视图而改变?
2.如果我的主轴是y轴,在这个方法上,这个特定方法的跨度也是指y轴?如果是这样,那么x轴上的偏移可以改变,因此x轴的偏移将在layoutMinorView()方法中处理吗?
欢迎更正。 提前谢谢。
答案 0 :(得分:1)
偏移量和跨度数组大小由子视图的数量定义。
假设段落有3行文字。然后偏移量和跨度数组长度为3。
您应该定义偏移量(每行的像素位置)。通常,第一个偏移从0开始(如果没有边距)。
跨度反映每个子视图的大小(再次以像素为单位)。
如果是段落,则假设您有3个相等的行,高度= 12。没有利润。
在
的召唤之后protected void layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
应返回偏移[0,12,24]并跨越[12,12,12]。
如果是第2行包含高度为20(较大字体)的文本片段,偏移量和跨度应为
偏移[0,12,32]和跨度[12,20,12]。