java中JTextPane 怎么把不同的行,设置为不同的对齐方式,我尝试了一下,怎么都是左对齐呀! 10
package execitive;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
public class Test3 {
private static String message = "In the beginning, there was COBOL, then there was FORTRAN, "
+ "then there was BASIC, ... and now there is Java.\n";
public static void main(String[] args) {
String title = (args.length == 0 ? "JTextPane Example" : args[0]);
JFrame frame = new JFrame(title);
Container content = frame.getContentPane();
StyleContext context = new StyleContext();
StyledDocument document = new DefaultStyledDocument(context);
Style style = context.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setAlignment(style, StyleConstants.ALIGN_LEFT);// 左对齐
try {
document.insertString(document.getLength(), message, style);
} catch (BadLocationException badLocationException) {
System.err.println("Oops");
}
SimpleAttributeSet attributes = new SimpleAttributeSet();
StyleConstants.setAlignment(attributes, StyleConstants.ALIGN_RIGHT);//右对齐
document.setParagraphAttributes(0, document.getLength(), style, true);
try {//为什么没有右对齐呀
document.insertString(document.getLength(), "Hello Java",
attributes);
} catch (BadLocationException badLocationException) {
}
JTextPane textarea = new JTextPane();
textarea.setEditable(false);
textarea.setBackground(UIManager.getColor("label.background"));
textarea.setFont(UIManager.getFont("label"));
textarea.setDocument(document);
JScrollPane textAreascrollPane = new JScrollPane(textarea);
content.add(textAreascrollPane, BorderLayout.CENTER);
JLabel AliasNameLabel = new JLabel("Local Name: ");
content.add(AliasNameLabel, BorderLayout.SOUTH);
frame.setSize(300, 150);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
} 展开
修改方法:
在JTextPane中使用带HTML格式的文本就可实际各部分文本按照不同格式显示的效果。
实际效果:
修改后的代码:
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
public class Test3 {
//TODO 修改代码
private static String message = "<p align='left'>In the beginning, there was COBOL, </p>"
+ "<p align='center'>then there was FORTRAN, </p>"
+ "<p align='right'>then there was BASIC, ... </p>"
+ "and now there is Java.\n";
public static void main(String[] args) {
String title = (args.length == 0 ? "JTextPane Example" : args[0]);
JFrame frame = new JFrame(title);
Container content = frame.getContentPane();
StyleContext context = new StyleContext();
StyledDocument document = new DefaultStyledDocument(context);
Style style = context.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setAlignment(style, StyleConstants.ALIGN_LEFT);// 左对齐
try {
document.insertString(document.getLength(), message, style);
}
catch (BadLocationException badLocationException) {
System.err.println("Oops");
}
SimpleAttributeSet attributes = new SimpleAttributeSet();
StyleConstants.setAlignment(attributes, StyleConstants.ALIGN_RIGHT);//右对齐
document.setParagraphAttributes(0, document.getLength(), style, true);
try {//为什么没有右对齐呀
document.insertString(document.getLength(), "Hello Java",
attributes);
}
catch (BadLocationException badLocationException) {
}
JTextPane textarea = new JTextPane();
//TODO 新增代码开始
textarea.setContentType("text/html");
textarea.setText(message);
//TODO 新增代码结束
textarea.setEditable(false);
//TODO 被注释代码
/*
textarea.setBackground(UIManager.getColor("label.background"));
textarea.setFont(UIManager.getFont("label"));
textarea.setDocument(document);
*/
JScrollPane textAreascrollPane = new JScrollPane(textarea);
content.add(textAreascrollPane, BorderLayout.CENTER);
JLabel AliasNameLabel = new JLabel("Local Name: ");
content.add(AliasNameLabel, BorderLayout.SOUTH);
frame.setSize(300, 200);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
欢迎继续交流。
JTextArea多行文本,想设置文字的对齐方式为居中对齐,却发现死活没有合适有效的方法,又试了JTextField和JLabel,都不理想。搜了一溜够看到JTextPane的解决方法,其实真是有点儿大材小用了。JTextPane里可以设置style,对齐方式、字体字号、颜色等等,并且还可以设置style的作用范围,挺方便的。另外,想把文字区域背景设为透明的也是在API中找了一通,才发现敢情就是setOpacity,呃,对这个单词实在是太不敏感了。。。。
把在coderanch上搜的例子贴在这里吧,以防以后忘了:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class Styling
{
public Styling()
{
String text = "To refer to locations within the sequence, the " +
"coordinates used are the location between two " +
"characters./nAs the diagram below shows, a location " +
"in a text document can be referred to as a position, " +
"or an offset. This position is zero-based.";
SimpleAttributeSet aSet = new SimpleAttributeSet();
StyleConstants.setForeground(aSet, Color.blue);
StyleConstants.setBackground(aSet, Color.orange);
StyleConstants.setFontFamily(aSet, "lucida bright italic");
StyleConstants.setFontSize(aSet, 18);
SimpleAttributeSet bSet = new SimpleAttributeSet();
StyleConstants.setAlignment(bSet, StyleConstants.ALIGN_CENTER);
StyleConstants.setUnderline(bSet, true);
StyleConstants.setFontFamily(bSet, "lucida typewriter bold");
StyleConstants.setFontSize(bSet, 24);
JTextPane textPane = new JTextPane();
textPane.setText(text);
StyledDocument doc = textPane.getStyledDocument();
doc.setCharacterAttributes(105, doc.getLength()-105, aSet, false);
doc.setParagraphAttributes(0, 104, bSet, false);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JScrollPane(textPane));
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
public static void main(String[] args)
{
new Styling();
}
}