Swing 在存在重复行的情况下突出显示JTextArea中的文本
我有一个Swing 在存在重复行的情况下突出显示JTextArea中的文本,swing,jtextarea,Swing,Jtextarea,我有一个JTextArea,它由行组成(其中一些行可能相互重复)。我有一个要求,我必须在右键单击时高亮显示所选行。我用来突出显示的代码如下: String highlightedText = textArea.getSelectedText(); if(highlightedText != null) { try{ int index = textArea.getText().indexOf(highlightedText, textArea.getCaretPosition(
JTextArea
,它由行组成(其中一些行可能相互重复)。我有一个要求,我必须在右键单击时高亮显示所选行。我用来突出显示的代码如下:
String highlightedText = textArea.getSelectedText();
if(highlightedText != null)
{
try{
int index = textArea.getText().indexOf(highlightedText, textArea.getCaretPosition());
textArea.getHighlighter().addHighlight(index - 1, index + highlightedText.length(),
new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE));
}catch (BadLocationException ex) {
}
}
虽然右键单击时高亮显示有效,但问题是在存在重复项的情况下,我无法获取所选行的索引。所以如果有这样的台词
AAAABBBB
AAAA
中交
DDDD
AAAA
当用户试图突出显示这一行时,我无法获得第二个“AAAA”的索引。有人能帮我提出一个解决这个问题的想法/建议吗?谢谢 你几乎全靠自己,但问题很少
getSelectionStart()
而不是getCaretPosition()
index
开始,而不是从index-1
开始public class HighlightingTextArea {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JTextArea textArea = new JTextArea(10, 44);
textArea.append("AAAA\nBBBB\nAAAA\nCCCC\nDDDD\nAAAA");
JButton b = new JButton(new AbstractAction("highlight") {
@Override
public void actionPerformed(ActionEvent e) {
highlightTextAreaSelection(textArea);
}
});
textArea.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
if (e.getButton() == MouseEvent.BUTTON3) {
highlightTextAreaSelection(textArea);
}
}
});
JPanel panel = new JPanel(new BorderLayout());
panel.add(textArea);
panel.add(b, BorderLayout.SOUTH);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.pack();
f.setVisible(true);
}
});
}
private static void highlightTextAreaSelection(JTextArea textArea) {
String highlightedText = textArea.getSelectedText();
if (highlightedText != null) {
try {
int index = textArea.getText().indexOf(highlightedText, textArea.getSelectionStart());
textArea.getHighlighter().addHighlight(index, index + highlightedText.length(),
new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE));
} catch (BadLocationException ex) {
}
}
}
}
你应该瞄准的是。使用上述两种方法后,请尝试此方法(滚动到第二个示例)。尝试此示例,它类似于您使用
viewToModel()
的情况。您可以获得偏移值,如上面的链接所示,它可以使用此方法为您提供行号。虽然这个问题问得很好,但我想提高投票率,但我今天的投票上限已经没有了,所以我会在八小时内做到:-)太好了!这个对我帮助很大!我不知道我为什么写索引-1:(……非常感谢你的帮助!!