`
nishijia
  • 浏览: 53260 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JTextArea 实现 单击某行高亮 双击显示内容的功能

阅读更多
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;


public class MyTextPanel extends JPanel {

	private JTextArea text;
	private JScrollPane scrollPanel = null;;
	private int line;

	public MyTextPanel() {
		super();
		setLayout(new BorderLayout());
		scrollPanel = new JScrollPane(getText());
		add(scrollPanel);
	}

	public void addContent(String content) {
		text.setText(content);
	}

	public JTextArea getText() {
		if (text == null) {
			text = new JTextArea();
			text.setMargin(new Insets(5, 5, 5, 5));
			text.setEditable(false);
			text.addCaretListener(new CaretListener() {
				public void caretUpdate(CaretEvent e) {
					if (text.getText().trim().length() == 0)
						return;

					int offset = e.getDot();
					// 计算光标所在行列
					try {
                                                //得到光标所在的行数
						line = text.getLineOfOffset(offset);
						//System.out.println(line);
						// int col = offset - text.getLineStartOffset(line);
						// System.out.println("col:"+col);

					} catch (BadLocationException e3) {
						e3.printStackTrace();
					}
				}
			});
			text.addMouseListener(new MouseAdapter() {

				@Override
				public void mouseClicked(MouseEvent e) {
					if (e.getClickCount() == 1) {//单击 高亮
						DefaultHighlighter h = (DefaultHighlighter) text.getHighlighter();
						MyHighlightPainter p = new MyHighlightPainter(
								new Color(226, 239, 255));
						try {
							int start = text.getLineStartOffset(line);
							int end = text.getLineEndOffset(line);
							h.removeAllHighlights();
							h.addHighlight(start, end, p);
						} catch (BadLocationException e1) {
							e1.printStackTrace();
						}
					}
					if (e.getClickCount() == 2) {//双击
						String[] lines = text.getText().split("\n");
						String store = lines[line];
						System.out.println(store);
					}
				}
			});
		}
		return text;
	}

	class MyHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter {
		public MyHighlightPainter(Color color) {
			super(color);
		}
	}

}

 效果图 上传了

加了2个监听器 才能实现 因为单单一个MouseListener 得不到 点击所在的行数  如有更加简单的方法 请指教

 

 

  • 大小: 9.1 KB
0
0
分享到:
评论

相关推荐

    java_JTextArea_实现不可修改文本内容、右键菜单

    ### Java Swing JTextArea 实现不可修改文本内容及右键菜单定制 #### 一、概述 在Java Swing开发中,`JTextArea` 是一个非常常用的组件,用于显示或编辑多行文本。有时候,我们可能需要创建一个只读的文本区域或者...

    JTextArea 实现行号

    最后,确保正确导入所需的库,并将这个自定义边框类应用到你的 `JTextArea` 实例上,就可以实现显示行号的功能。例如: ```java JTextArea jTextArea_1 = new JTextArea(); jTextArea_1.setBorder(new ...

    JAVA初级编码——继承JDialog, 利用JTextArea显示文档中的内容

    在Java编程语言中,"JAVA初级编码——继承JDialog, 利用JTextArea显示文档中的内容"这个主题涉及到了两个核心概念:JDialog和JTextArea。JDialog是Java Swing库中的一个组件,它用于创建独立于主应用程序窗口的...

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    今天,我们将学习如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。 一、Java 弹出菜单概述 Java 弹出菜单是一种 context-sensitive 菜单,即在用户点击右键时出现的菜单。它...

    改变JTextArea指定位置的背景色

    根据给定的信息,本文将详细解释如何通过Java Swing框架中的`JTextArea`组件来实现更改特定文本区域背景颜色的功能。 ### 一、项目背景与需求分析 #### 1.1 项目背景 在开发图形用户界面(GUI)应用时,经常需要对...

    重定向log4j日志到jtextarea

    以下是实现这个功能的基本步骤: 1. **创建自定义Appender**:你需要继承Log4j的AppenderSkeleton类,并实现其必要的方法,如`append()`。在这个方法中,你可以获取到日志事件(LoggingEvent),并从中提取出日志...

    java 使用JTextArea组件

    在Java Swing库中,`JTextArea`是一个非常重要的组件,用于在GUI应用程序中显示和编辑多行文本。它主要用于创建类似记事本的文本输入区域,可以用来展示大量的文本数据或者接收用户输入的多行文本。`JTextArea`是`...

    基于java的记事本功能的设计与实现

    在Java编程语言中,设计和实现一个记事本功能是一项基础但重要的练习,它能帮助开发者熟悉GUI(图形用户界面)编程、事件处理以及文件I/O操作。本项目旨在通过Java来创建一个简单的文本编辑器,它具备基本的记事本...

    JAVA实现记事本功能

    为了实现"打开"和"保存"功能,我们需要实现读取文件内容到JTextArea,以及将JTextArea中的内容写入到文件的操作。 2. **事件处理**:在GUI中,用户与界面的交互通常通过事件来处理。例如,当用户点击“保存”按钮时...

    简单的记事本程序,实现了基本功能

    根据给定的信息,我们可以分析并总结出一个简单记事本程序的关键知识点,这些知识点涵盖了基本的界面构建、菜单设计以及核心的功能实现。 ### 一、Java Swing基础介绍 #### 1.1 JFrame类 `JFrame`是Swing中的顶级...

    如何在整个数组列表的jtextarea中显示结果

    总之,在Java GUI中使用JTextArea显示数组列表的结果,你需要遍历列表,将每个元素转换成字符串,并通过`setText`方法更新JTextArea的内容。如果有加密需求,可以在转换前进行加密操作。记得在显示时,为了提高用户...

    swing jtextArea滚动条和文字缩放效果

    swing jtextArea是Java Swing中的一种组件,用于显示多行文本。今天,我们将详细介绍swing jtextArea滚动条和文字缩放效果,并提供了相关的代码实例。 首先,让我们了解一下swing jtextArea的基本概念。swing ...

    用java编写的记事本所有功能都实现demo

    此外,记事本的其他功能如查找替换、复制粘贴等,可以通过JTextArea提供的方法实现。例如,使用select()和copy()方法实现选中文本的复制,paste()方法进行粘贴,find()或replaceAll()方法处理查找和替换。 此Demo的...

    java 实现简单的记事本程序

    在“打开”功能中,我们会使用`FileReader`和`BufferedReader`来读取文件内容并显示在`JTextArea`中。 4. **文本格式化**:尽管这是一个简单的记事本,但可以考虑支持基本的文本格式化,比如剪切、复制和粘贴操作。...

    Java Swing实现添加数据并查询数据显示

    在“查询数据显示”部分,你可能需要使用SELECT语句获取数据,并将其显示在Swing组件上,如JTable或JTextArea。你可以创建ResultSet来迭代查询结果,并将每条记录转换为合适的数据结构,如ArrayList或Vector,然后...

    java笔记本功能实现

    这包括文本编辑器组件(如`JTextArea`),用于显示和编辑笔记内容,以及菜单栏和工具栏按钮,用于触发各种功能。 3. **打印功能**: - 使用Java的`java.awt.print`包,特别是`PrinterJob`类,可以实现文本的打印。...

    Java实现记事本功能

    在Java编程语言中实现一个记事本功能,可以让我们深入理解Java GUI(图形用户界面)设计、事件处理以及文本处理的基础知识。以下是一些相关的Java技术点和实现步骤: 1. **Swing库**:Java Swing是Java AWT(抽象...

    java 显示文件中的内容

    `JTextArea`用于显示文本,而`JScrollPane`则提供了滚动功能。 在实际开发中,你还需要考虑文件编码问题。默认情况下,`FileReader`和`FileWriter`使用平台默认的字符编码,这可能不适合所有情况。你可以使用`...

    java编写的简单的记事本小程序

    其次,为了实现文本编辑功能,程序可能会包含一个文本框(`JTextArea`)用于显示和编辑文本,以及一些按钮(如“打开”、“保存”、“新建”等)来触发相应的操作。这些按钮的事件处理通常通过`ActionListener`接口...

    java日历滚动字幕和实时时间显示

    在Java编程领域,创建一个能够显示当前日期、实时时间并具备滚动字幕功能的日历组件是一项常见的需求。这个组件不仅可以用于各种桌面应用,还可以在移动设备或者网页端提供丰富的交互体验。下面我们将深入探讨实现这...

Global site tag (gtag.js) - Google Analytics