JTextArea高亮文本


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class TextAreaTest 
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
JTextArea ta = new JTextArea(10, 20);
ta.setText("aabbcc sdfksdjgkj aa aa346i46i5aa");
frame.add(new JScrollPane(ta));
Highlighter highLighter = ta.getHighlighter();
String text = ta.getText();
DefaultHighlighter.DefaultHighlightPainter p = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
String keyWord = "aa";
int pos = 0;
while ((pos = text.indexOf(keyWord, pos)) >= 0)
{
try 
{
highLighter.addHighlight(pos, pos + keyWord.length(), p);
pos += keyWord.length();
}
catch (BadLocationException e) 
{
e.printStackTrace();
}
}
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//==============================取消所有高亮
Highlighter的removeAllHighlights()删除所有的高亮区域,另外addHighlight()方法会有个返回值,是Object类型,用变量把它保存起来,要删的时候用removeHighlight()把事先保存好的传进去就可以删掉指定的高亮区域了。  
实现类似有道翻译中的原文和译文相同句子高亮的功能,可以使用Java中的Swing图形界面库来开发。具体实现步骤如下: 1. 设计界面,可以使用JFrame、JPanel、JTextArea、JButton等Swing控件来实现。 2. 实现翻译功能,可以使用Java中的网络编程和API调用来实现。例如使用百度翻译API来实现翻译功能。 3. 实现句子匹配和高亮功能。可以将原文和译文分别按照句子分割成数组,然后对两个数组进行比较,找到相同的句子,并将其高亮显示。可以使用Java中的正则表达式来实现句子分割和匹配。 4. 将高亮后的原文和译文显示在界面上,可以使用JTextPane或JEditorPane控件来实现高亮显示。 下面是一个简单的代码示例,可以根据实际需求进行修改和优化: ```java import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.*; import javax.swing.*; import javax.swing.text.*; import com.alibaba.fastjson.JSON; import java.io.*; import java.net.*; public class Translation extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextArea inputArea; private JTextPane outputPane; public Translation() { setTitle("Translation"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // 添加输入区域 inputArea = new JTextArea(); JScrollPane inputScrollPane = new JScrollPane(inputArea); inputScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); inputScrollPane.setPreferredSize(new Dimension(400, 200)); add(inputScrollPane, BorderLayout.CENTER); // 添加翻译按钮和输出区域 JButton translateButton = new JButton("Translate"); translateButton.addActionListener(this); JPanel buttonPanel = new JPanel(); buttonPanel.add(translateButton); add(buttonPanel, BorderLayout.NORTH); outputPane = new JTextPane(); outputPane.setEditable(false); JScrollPane outputScrollPane = new JScrollPane(outputPane); outputScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); outputScrollPane.setPreferredSize(new Dimension(400, 200)); add(outputScrollPane, BorderLayout.SOUTH); pack(); setLocationRelativeTo(null); setVisible(true); } public void actionPerformed(ActionEvent e) { String input = inputArea.getText(); String output = translate(input); highlight(input, output); outputPane.setText(output); } public String translate(String input) { String result = ""; try { String url = "http://api.fanyi.baidu.com/api/trans/vip/translate"; String appid = "your appid"; String secretKey = "your secret key"; String salt = String.valueOf(System.currentTimeMillis()); String sign = MD5(appid + input + salt + secretKey); String param = "q=" + URLEncoder.encode(input, "UTF-8") + "&from=auto&to=zh&appid=" + appid + "&salt=" + salt + "&sign=" + sign; URL requestUrl = new URL(url + "?" + param); URLConnection connection = requestUrl.openConnection(); connection.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); Map<String,Object> map = JSON.parseObject(sb.toString()); List<Map<String,Object>> list = (List<Map<String,Object>>) map.get("trans_result"); for (Map<String,Object> item : list) { result += item.get("dst").toString() + "\n"; } } catch (Exception e) { e.printStackTrace(); } return result; } public void highlight(String input, String output) { StyledDocument doc = outputPane.getStyledDocument(); Style style = outputPane.addStyle("highlight", null); StyleConstants.setBackground(style, Color.YELLOW); String[] inputSentences = input.split("[.!?]"); String[] outputSentences = output.split("[.!?]"); for (String inputSentence : inputSentences) { inputSentence = inputSentence.trim(); if (inputSentence.length() > 0) { for (String outputSentence : outputSentences) { outputSentence = outputSentence.trim(); if (outputSentence.length() > 0 && outputSentence.equals(inputSentence)) { try { int start = output.indexOf(outputSentence); int end = start + outputSentence.length(); doc.setCharacterAttributes(start, outputSentence.length(), style, true); } catch (Exception e) { e.printStackTrace(); } } } } } } public String MD5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(str.getBytes("UTF-8")); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { String hex = Integer.toHexString(b & 0xff); if (hex.length() == 1) { sb.append("0"); } sb.append(hex); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } public static void main(String[] args) { new Translation(); } } ``` 这个示例代码实现了类似有道翻译中的原文和译文相同句子高亮的功能,可以输入英文文本并翻译成中文,同时高亮显示原文和译文中相同的句子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值