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
分享到:
相关推荐
### Java Swing JTextArea 实现不可修改文本内容及右键菜单定制 #### 一、概述 在Java Swing开发中,`JTextArea` 是一个非常常用的组件,用于显示或编辑多行文本。有时候,我们可能需要创建一个只读的文本区域或者...
最后,确保正确导入所需的库,并将这个自定义边框类应用到你的 `JTextArea` 实例上,就可以实现显示行号的功能。例如: ```java JTextArea jTextArea_1 = new JTextArea(); jTextArea_1.setBorder(new ...
在Java编程语言中,"JAVA初级编码——继承JDialog, 利用JTextArea显示文档中的内容"这个主题涉及到了两个核心概念:JDialog和JTextArea。JDialog是Java Swing库中的一个组件,它用于创建独立于主应用程序窗口的...
今天,我们将学习如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。 一、Java 弹出菜单概述 Java 弹出菜单是一种 context-sensitive 菜单,即在用户点击右键时出现的菜单。它...
根据给定的信息,本文将详细解释如何通过Java Swing框架中的`JTextArea`组件来实现更改特定文本区域背景颜色的功能。 ### 一、项目背景与需求分析 #### 1.1 项目背景 在开发图形用户界面(GUI)应用时,经常需要对...
以下是实现这个功能的基本步骤: 1. **创建自定义Appender**:你需要继承Log4j的AppenderSkeleton类,并实现其必要的方法,如`append()`。在这个方法中,你可以获取到日志事件(LoggingEvent),并从中提取出日志...
在Java Swing库中,`JTextArea`是一个非常重要的组件,用于在GUI应用程序中显示和编辑多行文本。它主要用于创建类似记事本的文本输入区域,可以用来展示大量的文本数据或者接收用户输入的多行文本。`JTextArea`是`...
在Java编程语言中,设计和实现一个记事本功能是一项基础但重要的练习,它能帮助开发者熟悉GUI(图形用户界面)编程、事件处理以及文件I/O操作。本项目旨在通过Java来创建一个简单的文本编辑器,它具备基本的记事本...
为了实现"打开"和"保存"功能,我们需要实现读取文件内容到JTextArea,以及将JTextArea中的内容写入到文件的操作。 2. **事件处理**:在GUI中,用户与界面的交互通常通过事件来处理。例如,当用户点击“保存”按钮时...
根据给定的信息,我们可以分析并总结出一个简单记事本程序的关键知识点,这些知识点涵盖了基本的界面构建、菜单设计以及核心的功能实现。 ### 一、Java Swing基础介绍 #### 1.1 JFrame类 `JFrame`是Swing中的顶级...
总之,在Java GUI中使用JTextArea显示数组列表的结果,你需要遍历列表,将每个元素转换成字符串,并通过`setText`方法更新JTextArea的内容。如果有加密需求,可以在转换前进行加密操作。记得在显示时,为了提高用户...
swing jtextArea是Java Swing中的一种组件,用于显示多行文本。今天,我们将详细介绍swing jtextArea滚动条和文字缩放效果,并提供了相关的代码实例。 首先,让我们了解一下swing jtextArea的基本概念。swing ...
此外,记事本的其他功能如查找替换、复制粘贴等,可以通过JTextArea提供的方法实现。例如,使用select()和copy()方法实现选中文本的复制,paste()方法进行粘贴,find()或replaceAll()方法处理查找和替换。 此Demo的...
在“打开”功能中,我们会使用`FileReader`和`BufferedReader`来读取文件内容并显示在`JTextArea`中。 4. **文本格式化**:尽管这是一个简单的记事本,但可以考虑支持基本的文本格式化,比如剪切、复制和粘贴操作。...
在“查询数据显示”部分,你可能需要使用SELECT语句获取数据,并将其显示在Swing组件上,如JTable或JTextArea。你可以创建ResultSet来迭代查询结果,并将每条记录转换为合适的数据结构,如ArrayList或Vector,然后...
这包括文本编辑器组件(如`JTextArea`),用于显示和编辑笔记内容,以及菜单栏和工具栏按钮,用于触发各种功能。 3. **打印功能**: - 使用Java的`java.awt.print`包,特别是`PrinterJob`类,可以实现文本的打印。...
在Java编程语言中实现一个记事本功能,可以让我们深入理解Java GUI(图形用户界面)设计、事件处理以及文本处理的基础知识。以下是一些相关的Java技术点和实现步骤: 1. **Swing库**:Java Swing是Java AWT(抽象...
`JTextArea`用于显示文本,而`JScrollPane`则提供了滚动功能。 在实际开发中,你还需要考虑文件编码问题。默认情况下,`FileReader`和`FileWriter`使用平台默认的字符编码,这可能不适合所有情况。你可以使用`...
其次,为了实现文本编辑功能,程序可能会包含一个文本框(`JTextArea`)用于显示和编辑文本,以及一些按钮(如“打开”、“保存”、“新建”等)来触发相应的操作。这些按钮的事件处理通常通过`ActionListener`接口...
在Java编程领域,创建一个能够显示当前日期、实时时间并具备滚动字幕功能的日历组件是一项常见的需求。这个组件不仅可以用于各种桌面应用,还可以在移动设备或者网页端提供丰富的交互体验。下面我们将深入探讨实现这...