`

JAVA文本域显示不同字体颜色的文字

阅读更多


package JTextPane;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;

/**
 * @version 1.0
 * @author 刘胜军
 */
public class Test extends JFrame {
	private static final long serialVersionUID = 1L;

	/** 定义一个历史面板,用于显示已经发送的文字 */
	private JTextPane _old = new JTextPane();

	/** 定义一个输入面板,用于显示正在输入的内容 */
	private JTextPane _new = new JTextPane();

	/** 声明三组样式,具体的在方法public static void styleInit() {}中定义 */
	private Style style1 = null;
	private Style style2 = null;
	private Style style3 = null;

	/** 下拉列表,用于选择样式 */
	private JComboBox<String> box = new JComboBox<String>();

	/** 发送按钮,用于将消息提交到历史面板 */
	private JButton send = new JButton("提交");

	public static void main(String[] args) {
		new Test();
	}

	/**
	 * 构造方法,需要完成所以初始化操作 鼠标放在方法名上,可以显示其内容
	 */
	public Test() {
		styleInit();
		init();
	}

	/** 样式初始化 */
	public void styleInit() {

		Style style = _new.getStyledDocument().addStyle(null, null);// 获取组件空样式,addStyle(null,
																	// null)会返回一个空样式

		StyleConstants.setFontFamily(style, "楷体");// 为style样式设置字体属性
		StyleConstants.setFontSize(style, 18);// 为style样式设置字体大小

		Style normal = _new.addStyle("normal", style);// 将style样式添加到组件,并命名为normal,返回一个样式由Style
														// normal变量接收
		/** 这个时候,组件编辑器关联的模型中就添加了一个样式normal,这个样式是最基本的一个样式,其他样式可以根据他进行修改 */

		style1 = _new.addStyle("style1", normal);// 基于normal样式,在添加三次,分别命名为style1,style2,style3
		style2 = _new.addStyle("style2", normal);// 此时,style1,style2,style3三个样式和normal样式是一模一样的
		style3 = _new.addStyle("style3", normal);// 如果修改,可以对每个变量单独修改,具体修改方式如下

		StyleConstants.setForeground(style1, Color.GREEN);// 将style1的颜色设置为绿色

		StyleConstants.setForeground(style2, Color.RED);// 将style2的颜色设置为红色

		StyleConstants.setForeground(style3, Color.BLACK);// 将style3的颜色设置为黑色
		StyleConstants.setFontSize(style3, 14);// 将style3的大小设置为14
	}

	/** 初始化布局 */
	public void init() {
		this.setBounds(200, 100, 420, 520);
		this.setLayout(null);

		this._old.setEditable(false);
		// 定义滚动面板,放历史面板,以实现滚动条(有需要的时候显示)和换行
		JScrollPane js_old = new JScrollPane(_old,
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		// 设置位置大小
		js_old.setBounds(0, 0, 400, 300);
		// 添加到窗体
		this.add(js_old);

		// 定义滚动面板,放输入面板,以实现滚动条(有需要的时候显示)和换行
		JScrollPane js_new = new JScrollPane(_new,
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		// 设置位置大小
		js_new.setBounds(0, 350, 400, 150);
		// 添加到窗体
		this.add(js_new);

		this.box.addItem("style1");
		this.box.addItem("style2");
		this.box.addItem("style3");
		this.box.setBounds(50, 315, 100, 20);
		this.add(this.box);

		this.send.setBounds(200, 315, 100, 20);
		this.add(this.send);

		this.send.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				inserMessage();
			}
		});

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	/** 将文字插入到历史面板,并清空输入面板 */
	public void inserMessage() {
		try {
			/** 判断下拉列表内容,确定使用哪种样式 */
			Style style = (box.getSelectedItem().equals("style1")) ? style1
					: (box.getSelectedItem().equals("style2")) ? style2
							: style3;
			/**
			 * 获取历史面板的insertString方法,将文字追加到历史面板上
			 * 
			 * void insertString(int offset, String str, AttributeSet a) throws
			 * BadLocationException offset - 要插入内容的偏移量,该值 >=
			 * 0。跟踪给定的位置或其后位置的更改的所有位置都将移动。 str - 要插入的字符串 a -
			 * 要与插入的内容关联的属性。如果没有属性,它可能为 null。
			 * 
			 * this._old.getStyledDocument().getLength()这一句是获取当前面板内容的总长度,
			 * 作为要插入内容的偏移量 this._new.getText()+"\n"这一句是获取输入面板内容 style这一句是使用的样式
			 */
			this._old.getStyledDocument().insertString(
					this._old.getStyledDocument().getLength(),
					this._new.getText() + "\n", style);
			/** 将输入面板置空 */
			this._new.setText(null);
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
	}

}
  • 大小: 9.6 KB
1
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JAVA文本域插入表情

    这篇博文“JAVA文本域插入表情”似乎探讨了如何在`JTextPane`中实现这一功能。 首先,`JTextPane`是基于`javax.swing.text`包中的`Document`模型,它可以插入不仅仅是文字,还可以包含图片,这就为我们插入表情提供...

    如果右键单机文本域会弹出美观的日历控件

    - 为了让日历控件看起来更美观,开发者可以自定义各种颜色,比如背景色、字体颜色等。在这个例子中,有多种颜色变量来定义界面的不同部分,如底色、日期文字色、星期文字色等。 - 同时,使用了不同的布局管理器,...

    实验五--Java事件处理.docx

    4. 用户从字体样式下拉框中选择一种字体样式,文本域中的文字应相应改变字体样式。 5. 用户从字体大小下拉框中选择一个大小,文本域中的文字应调整为所选字体大小。 6. 用户从窗体样式下拉框中选择一个效果,窗体的...

    一种简单粗暴的方式实现Android文本域左右对齐

    当然,这个例子比较基础,实际应用中可能需要处理更多复杂情况,比如多行文本、不同字体大小或颜色等。你可以根据具体需求进行扩展,例如添加更多的分割字符、支持多段对齐等。 在使用`AlignedTextView`时,只需在...

    java 写的转pdf代码,支持表格内容的中文换行

    CSS样式的支持使得开发者可以精细控制PDF的外观,包括字体、颜色、大小、边距、对齐方式等。通过CSS,可以轻松实现复杂的布局和样式,例如表格的列宽、行高、边框样式,甚至自定义页眉和页脚。 为了使用这个代码,...

    Java/JSP万年历编写实例.rar

    //设置文本域文字  add(tfYear);  add(new Label(" 月:"));  monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字体  for (int i = 0; i ; i ) {   monthChoice.addItem(months[i]); //...

    实验五 Java事件处理【精选文档】.doc

    1. 文本框事件处理:通过`inputText.addActionListener()`,我们可以为文本框添加`ActionListener`,当用户按下回车键时,`actionPerformed`方法会被调用,从而在文本域中显示输入的文字。 2. 复选框事件处理:`...

    文本框属性

    因此,在不同设备和分辨率下,实际显示效果可能有所不同。 ### rows属性 `rows`属性决定了文本框的高度,以行数表示。如`rows="10"`设定文本框显示10行文本。这与`cols`属性类似,不会精确到像素,但提供了对...

    记事本(java)

    6. **字体设置**:允许用户更改文字的字体、大小和颜色,这涉及到`Font`类的使用。 7. **撤销/重做**:通过维护一个操作历史栈来实现这些功能。 8. **菜单和快捷键**:使用`JMenuBar`和`JMenuItem`创建菜单,并...

    Java记事本源代码(完整).pdf

    【Java记事本源代码详解】 本篇将详细介绍一个基于Java Swing实现的简易记事本程序的源代码。...通过深入理解并修改这个源代码,可以进一步扩展功能,例如增加撤销/重做、查找替换高亮、字体颜色设置等。

    JAVA课程设计 - 文本编辑器.doc

    - 编辑区:通过JTextArea创建文本域,加入文档事件监听器,以跟踪文本变化。 - 菜单设计:利用JMenuBar、JMenu、JMenuItem等组件构建菜单结构,设置快捷键,并添加ActionListener以响应用户操作。 5. 事件响应...

    Acrobat字段填入方法

    4. **绘制文本域**:如果文档中缺少文本框,则可以手动绘制。选择“准备表单”工具,然后选择“文本字段”,在文档上绘制文本框。 5. **调整文本位置与对齐方式**:选中文本框后,可通过拖动调整位置,并通过工具栏...

    iReport User Manual

    - **文本域**:用于显示从数据源获取的动态内容。 **子报表:** 可以在主报表中嵌套子报表,用于更复杂的布局和数据展示需求。 **特殊元素:** - **图表**:支持多种类型的图表,如柱状图、饼图等。 - **条形码**...

    JavaWeb开发基础之Html详解

    6. **文本域**:`&lt;textarea&gt;`标签用于创建一个多行文本输入区域。可以指定其名称、列数和行数等属性。示例代码如下: ```html &lt;textarea name="info" cols="40" rows="7"&gt;&lt;/textarea&gt; ``` 7. **文件上传**:`...

    HTML语法 大全 HTML语法

    * `&lt;TEXTAREA&gt;`元素用于定义表单的文本域。 * `&lt;SELECT&gt;`元素用于定义表单的下拉菜单。 * `&lt;OPTION&gt;`元素用于定义下拉菜单的选项。 九、框架 * `&lt;FRAMESET&gt;`元素用于定义框架集。 * `&lt;FRAME&gt;`元素用于定义框架。 *...

Global site tag (gtag.js) - Google Analytics