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 得不到 点击所在的行数  如有更加简单的方法 请指教

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值