- 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/
在 textField 中,当文本对齐方式为 TextAlign.center 或 TextAlign.right 时,Cursor 错位(TextAlign.end). 请看附件 gif。 good
我在一行中有一个简单的 TextField,其中包含一个 Text 和一个 TextField,但如果在 TextField/TextFormField 中使用 textAlign:TextAlign
安卓 我试图使用 textAlign 使文本对齐,但它不起作用。 Lorem ipsum dolor sit amet, et usu congue vocibus, ei sea alienum
我的 Visual C# Express 2010 表单应用程序中有一个路径选择器。 我使用 FolderBrowserDialog 和(单行)TextBox 来显示所选路径。在我的 UI 刷新代码中
我的 Visual C# Express 2010 表单应用程序中有一个路径选择器。 我使用 FolderBrowserDialog 和(单行)TextBox 来显示所选路径。在我的 UI 刷新代码中
我知道如何在 UILabel 上对齐文本。但是这个问题有点有线。所有其他对齐都有效,例如 NSTextAlignmentJustified、NSTextAlignmentNatural。只有 NSTe
我制作了一个 XML,其中包含一个 TextView,在以下代码中有一个 textAlignement:center:
如何将 Snackbar 文本对齐方式更改为居中?下面的代码不起作用 Snackbar snack = Snackbar.make(findViewById(android.R.id.content)
我想用 controls.find 检查标签的文本对齐。但是我收到错误。 这是我的代码: for (int i = 0; i<=100; i++) { if (f1.Controls.Find(
我想像这样使用数据绑定(bind)将 android:textAlignment 应用到 TextView: android:textAlignment="@{viewModel.switcher
我制作了一个 UITableViewControl。我需要为 UITableViewHeaderFooterView 设置 textAlignment ,如下所示。但它不起作用。 UITableVie
我正在尝试使用以下代码将 textLabel 居中放置在我的 UITableViewCell 中: cell.textLabel.textAlignment = NSTextAlignmentCen
我有一个很大的问题,我有一个 UILabel 以编程方式创建,然后通过 Interface builder 连接,我已将其定位在我需要的位置,但我看到我在其中设置的文本打印在UILabelBox 的中
如果我的 textView 有文本 (从右到左,如阿拉伯语) 方向,我正在尝试根据文本方向设置 textAlignment然后我想设置 textAlignment NSTextAlignmentRig
我有一个标签,我想右对齐以便能够与文本框对齐。 Visual Studio 2010 Express 中的设计器为我生成了这段代码 this.lblAddData.AutoSize = true;
android:textAlignment和android:gravity有什么区别? 最佳答案 我只能看到 textAlignment 是 View 类的成员,而重力是 TextView 类的成员。
Label.TextAlign类型为 ContentAlignment .它允许开发人员选择垂直和水平对齐方式的任意组合。 TextBox.TextAlign类型为 HorizontalAlignme
我无法在 fabric.js 中使用 textAlign fontSize、fontBackground 可以正常工作,但 textAlign 不能。我错过了什么吗? var canvas = new
我创建了如下所示的按钮: 它的xml代码是: 一切都很好,但是由于某种原因,按钮内的文本在开始时停止出现,它总是显示在中间。 有
如何将所有 Storyboard中所有 UILabel 的 textAlignment 属性设置为 NSTextAlignmentNatural? 我们的应用有很多 Storyboard和 xib 文
我是一名优秀的程序员,十分优秀!