我对java很陌生,并且正在开发。最近我读了一篇文章:在JTextArea或JTextPane中以文本为中心-水平文本对齐
内部的解决方案非常有效,但我有一些概念性的问题要问。
我在甲骨文网站上读到了界面和类的介绍。它说,接口包含一组空体的方法,那么实现该接口的类需要声明接口中提到的所有方法,才能成功地实现。
下面是我的问题:在阅读完文档之后,我知道StyledDocument是一个接口,但是下面的代码意味着什么呢?
StyledDocument doc = textPane.getStyledDocument();我的解释是,我猜想JTextPane在内部实现了StyledDocument,因此这一行代码将接收现有的StyledDocument (,但不应该被称为实例,因为我们无法创建接口实例,我应该如何描述它呢?)。如果这是真的,那么JTextPane应该在StyledDocument接口中定义所有方法。
,我在上面的段落中是正确的吗?
然后,我尽量不写这两行代码:
StyledDocument doc = textPane.getStyledDocument();
doc.setParagraphAttributes(0, doc.getLength(), center, false);但我直接用:
textPane.setParagraphAttributes(center, false);这件事也很完美。
那么,这两个实现之间有什么区别吗?
我的代码是这样做的良好实践吗?
非常感谢您的帮助!
发布于 2015-08-05 04:37:47
我认为您被多态的概念卡住了,先来看看多态上的线索。
我的解释是,我猜想JTextPane在内部实现了StyledDocument,因此这一行代码将接收现有的StyledDocument (但不应该被称为实例,因为我们无法创建接口实例,我应该如何描述它?)如果这是真的,那么JTextPane应该在StyledDocument接口中定义所有方法。
不是的。getStyledDocument方法返回一个实现StyledDocument接口的对象。JTextPane不直接实现此功能,但将需求委托给实现StyledDocument接口的对象的实例。
它们一起提供了显示样式文本的方法。这是模型-视图-控制器范式的一个概念,其中非可视功能(模型或StyledDocument)与视图( JTextPane)分离。
然后,我尽量不写这两行代码: StyledDocument doc = textPane.getStyledDocument();doc.setParagraphAttributes(0,doc.getLength(),中间,false); 但我直接用: TextPane.setParagraphAttributes(中间,假); 这件事也很完美。 那么,这两个实现之间有什么区别吗?
是也不是。setParagraphAttributes将该功能委托给StyledDocument,如下从JTextPane获取的代码片段所示:
public void setParagraphAttributes(AttributeSet attr, boolean replace) {
int p0 = getSelectionStart();
int p1 = getSelectionEnd();
StyledDocument doc = getStyledDocument();
doc.setParagraphAttributes(p0, p1 - p0, attr, replace);
}它只是一种方便的方法,可以让你的生活变得简单一些。
我的代码是这样做的良好实践吗?
我认为使用提供的功能来实现您的目标是没有问题的。
https://stackoverflow.com/questions/31823467
复制相似问题