- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在同一行上对齐两部分文本:第一部分应与左侧对齐,另一部分应与 java swing JTextPane 的右侧对齐。我尝试使用样式接口(interface)和 Styleconstants 类来对齐文本,但没有用。但是当我在同一文本上应用一些其他样式时,例如 Styleconstants.setFontSize()、Styleconstants.setForeGroundColor(),它工作正常。
这是我的代码:
JTextPane pane = new JTextPane();
StyledDocument sdoc = pane.getStyledDocument();
SimpleAttributeSet rightAlign = new SimpleAttributeSet();
StyleConstants.setAlignment(rightAlign, StyleConstants.ALIGN_RIGHT);
StyleConstants.setForeground(rightAlign, Color.lightGray);
StyleConstants.setFontSize(rightAlign, 11);
sdoc.insertString(sdoc.getLength(), "name", null);
sdoc.insertString(sdoc.getLength(), "timeHis" + "\n", rightAlign);
输出如下
nametimeHis
但我想要这样的输出
姓名 timeHis
(在同一行的 JTextpane 中正好相反的一侧)
我的代码有什么问题吗?我该如何解决这个问题?
最佳答案
我不认为你可以为同一行设置两个不同的对齐方式(据我所知,即使在专业的文本编辑器中你也不能这样做 - 只是通过设置对齐方式)。我像这样重写了你的代码:
SimpleAttributeSet rightAlign = new SimpleAttributeSet();
SimpleAttributeSet leftAlign = new SimpleAttributeSet();
StyleConstants.setAlignment(rightAlign, StyleConstants.ALIGN_RIGHT);
StyleConstants.setForeground(rightAlign, Color.lightGray);
StyleConstants.setFontSize(rightAlign, 11);
StyleConstants.setAlignment(leftAlign, StyleConstants.ALIGN_LEFT);
StyleConstants.setForeground(leftAlign, Color.black);
StyleConstants.setFontSize(leftAlign, 13);
String left = "name";
String right = "timeHis\n";
sdoc.insertString(0, left, leftAlign);
sdoc.insertString(left.length(), right, rightAlign);
sdoc.setParagraphAttributes(0, left.length(), leftAlign, false);
sdoc.setParagraphAttributes(left.length()+1, sdoc.getLength()-1-left.length(), rightAlign, false);
大小和颜色都不错,但两个字符串的对齐方式都正确。如果您像这样在最后两行中交换对齐方式:
sdoc.setParagraphAttributes(0, left.length(), rightAlign, false);
sdoc.setParagraphAttributes(left.length()+1, sdoc.getLength()-1-left.length(),leftAlign, false);
两者都将左对齐,但是如果您在左侧字符串中添加一个新行:
String left = "name\n";
对齐也变得很重要。 setParagraphAttributes方法完全按照它说的做 - 关键是对齐是 paragraph属性 - 打开 OO Writer 或 MS Word(pad),写一些文字并对齐 - 它会更清晰。
当我想在 MS Word/OO Writer 中实现对齐时,我制作了一个带有不可见边框的表格,并将左列设置为左对齐,将右列设置为右对齐。这将导致我们需要 HTMLDocument(因为您可以在 HTML 中创建 table)类来实现 StyledDocument interface 的结论。 .所以我尝试了这个:
JTextPane pane = new JTextPane(new HTMLDocument());
这导致没有样式。这是有道理的,因为 Cascading Style Sheets是设置 HTML 样式的正确方法。这constructor还解释了它:
public HTMLDocument(StyleSheet styles)
这是 StyleSheet 的链接构造函数参数。
但是,这样就可以了:
JTextPane pane = new JTextPane();
pane.setEditorKit(new HTMLEditorKit());
安EditorKit :
Establishes the set of things needed by a text component to be a reasonably functioning editor for some type of text content. The EditorKit acts as a factory for some kind of policy. For example, an implementation of html and rtf can be provided that is replaceable with other implementations.
一些 EditorKit 方法是:
createCaret()
getContentType()
read(Reader in, Document doc, int pos)
write(Writer out, Document doc, int pos, int len)
所以,基本上它是一个可编程的编辑器(通过读写方法)text component的文本内容,即Document :
The Document is a container for text that serves as the model for swing text components. The goal for this interface is to scale from very simple needs (a plain text textfield) to complex needs (an HTML or XML document, for example).
因此,HTMLEditorKit是文本组件的 HTML 文本内容 的可编程编辑器,即 HTMLDocument - 仔细查看此类的继承链和实现接口(interface) - 您会在整个答案中注意到几乎所有这些。
现在,这是来自 HTMLEditorKit apidoc 的神奇部分:
Although the Document provides HTML support by default, there is nothing preventing support of non-HTML tags that result in alternative element structures.
所以看起来这个类的默认实现翻译了我们的 style attributes以我们想要的方式转换为 HTML/CSS:在同一行中左右对齐。
这是有道理的,因为使用 HTML/CSS 您至少可以通过两种方式做到这一点:
而且很可能还有更多方法可以做到这一点。
关于java - Textalignment 在 java swing jTextPane 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069730/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!