cd不行,因为这两个成员是private的(没写也是默认private)
不知道你这个问题是否已经解决, 如果还没有解决的话:简称SRP(Single Responsibility Principle)原则,每个类型(包括接口和抽象)功能要求单一,只负责一件事情,不能包罗万象。
例如一个 Modem(调制解调器)的接口
interface Modem {
public void dial(String pno);
public void hangup();
public void send(char c);
public char recv();
}
这个接口中存在两个职责:第一个是管理连接(dial和hangup);第二个是数据传输(send和recv),这两个职责应该被分开。
需要提供更多上下文信息,例如图表和代码的具体内容以及语言。除此之外,如果在SVG中需要控制文本的自适应换行,可以通过编写一个wrap函数来实现。该函数可以将文本逐行分割,并适当调整每行的y坐标,以实现文本自适应换行和垂直居中。下面是一个wrap函数的示例代码:
/**
* 定义wrap函数,用于将文本自动换行
* @param {svg select} text
*/
function wrap(text) {
text.each(function () {
var text = d3.select(this)
var words = text.text().split(' ').reverse()
var lineHeight = 16
var width = parseFloat(text.attr('width'))
var y = parseFloat(text.attr('y'))
var x = text.attr('x')
var anchor = text.attr('text-anchor')
var tspan = text
.text(null)
.append('tspan')
.attr('x', x)
.attr('y', y)
.attr('text-anchor', anchor)
var lineNumber = 0
var line = []
var word = words.pop()
while (word) {
line.push(word)
tspan.text(line.join(' '))
if (tspan.node().getComputedTextLength() > width) {
lineNumber += 1
line.pop()
tspan.text(line.join(' '))
line = [word]
tspan = text
.append('tspan')
.attr('x', x)
.attr('y', y + lineNumber * lineHeight)
.attr('anchor', anchor)
.text(word)
}
word = words.pop()
}
if (lineNumber) {
d3.select(this).attr(
'transform',
'translate(0,' + (-lineNumber * lineHeight) / 2 + ')'
)
}
})
}
该函数中的变量含义如下:
在函数中,我们首先使用text.each函数来遍历每个文本元素,并对其进行自适应换行。然后,我们使用split函数将文本逐单词分割,并将其逆向排列,以便从后往前逐词处理。接着,我们定义了一个tspan元素,用于创建文本,并在其上设置元素属性。然后,我们启动一个循环,将每个单词依次加入当前行中,然后检查当前行的宽度是否超出了文本容器的宽度。如果超出了,则将该单词从当前行中删除,并将该行文本重新设置为当前行的其余单词,而将超出的单词用一个新的tspan元素进行绘制。最后,我们还需要将文本垂直居中,并根据行数适当调整文本的y坐标。
注意,在使用该函数时,需要先为文本元素设置好width和y属性,以及其他样式属性,如font-size、font-weight、fill等。同时,该函数中的16、’ ‘等参数可以根据实际需求进行调整。