Java 突出显示JTextArea中的一个特定行/行
我试图突出显示Java 突出显示JTextArea中的一个特定行/行,java,swing,highlight,jtextarea,Java,Swing,Highlight,Jtextarea,我试图突出显示JTextArea中的一行,但我不知道该怎么做。我需要得到特定的行,然后突出显示它。我读过其他的帖子,但我仍然不明白如何把它们结合起来解决我的问题……如果能帮上忙,我将不胜感激 试试这个代码示例,如果有不清楚的地方,一定要问: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class TextHighlight { pr
JTextArea
中的一行,但我不知道该怎么做。我需要得到特定的行,然后突出显示它。我读过其他的帖子,但我仍然不明白如何把它们结合起来解决我的问题……如果能帮上忙,我将不胜感激 试试这个代码示例,如果有不清楚的地方,一定要问:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class TextHighlight
{
private JTextArea tarea;
private JComboBox cbox;
private JTextField lineField;
private String[] colourNames = {"RED", "ORANGE", "CYAN"};
private Highlighter.HighlightPainter painter;
private void createAndDisplayGUI()
{
final JFrame frame = new JFrame("Text HIGHLIGHT");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5), "Highlighter JTextArea"));
tarea = new JTextArea(10, 10);
JScrollPane scrollPane = new JScrollPane(tarea);
contentPane.add(scrollPane);
JButton button = new JButton("HIGHLIGHT TEXT");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
int selection = JOptionPane.showConfirmDialog(
frame, getOptionPanel(), "Highlighting Options : ", JOptionPane.OK_CANCEL_OPTION
, JOptionPane.PLAIN_MESSAGE);
if (selection == JOptionPane.OK_OPTION)
{
System.out.println("OK Selected");
int lineNumber = Integer.parseInt(lineField.getText().trim());
try
{
int startIndex = tarea.getLineStartOffset(lineNumber);
int endIndex = tarea.getLineEndOffset(lineNumber);
String colour = (String) cbox.getSelectedItem();
if (colour == colourNames[0])
{
System.out.println("RED Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
else if (colour == colourNames[1])
{
System.out.println("ORANGE Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
else if (colour == colourNames[2])
{
System.out.println("CYAN Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.CYAN);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
}
catch(BadLocationException ble)
{
ble.printStackTrace();
}
}
else if (selection == JOptionPane.CANCEL_OPTION)
{
System.out.println("CANCEL Selected");
}
else if (selection == JOptionPane.CLOSED_OPTION)
{
System.out.println("JOptionPane closed deliberately.");
}
}
});
frame.add(contentPane, BorderLayout.CENTER);
frame.add(button, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel getOptionPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 2, 5, 5));
JLabel lineNumberLabel = new JLabel("Enter Line Number : ");
lineField = new JTextField(10);
JLabel colourLabel = new JLabel("Select One Colour : ");
cbox = new JComboBox(colourNames);
panel.add(lineNumberLabel);
panel.add(lineField);
panel.add(colourLabel);
panel.add(cbox);
return panel;
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TextHighlight().createAndDisplayGUI();
}
});
}
}
以下是它的输出:
试试这个代码示例,如果有不清楚的地方,一定要问:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class TextHighlight
{
private JTextArea tarea;
private JComboBox cbox;
private JTextField lineField;
private String[] colourNames = {"RED", "ORANGE", "CYAN"};
private Highlighter.HighlightPainter painter;
private void createAndDisplayGUI()
{
final JFrame frame = new JFrame("Text HIGHLIGHT");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5), "Highlighter JTextArea"));
tarea = new JTextArea(10, 10);
JScrollPane scrollPane = new JScrollPane(tarea);
contentPane.add(scrollPane);
JButton button = new JButton("HIGHLIGHT TEXT");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
int selection = JOptionPane.showConfirmDialog(
frame, getOptionPanel(), "Highlighting Options : ", JOptionPane.OK_CANCEL_OPTION
, JOptionPane.PLAIN_MESSAGE);
if (selection == JOptionPane.OK_OPTION)
{
System.out.println("OK Selected");
int lineNumber = Integer.parseInt(lineField.getText().trim());
try
{
int startIndex = tarea.getLineStartOffset(lineNumber);
int endIndex = tarea.getLineEndOffset(lineNumber);
String colour = (String) cbox.getSelectedItem();
if (colour == colourNames[0])
{
System.out.println("RED Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
else if (colour == colourNames[1])
{
System.out.println("ORANGE Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
else if (colour == colourNames[2])
{
System.out.println("CYAN Colour");
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.CYAN);
tarea.getHighlighter().addHighlight(startIndex, endIndex, painter);
}
}
catch(BadLocationException ble)
{
ble.printStackTrace();
}
}
else if (selection == JOptionPane.CANCEL_OPTION)
{
System.out.println("CANCEL Selected");
}
else if (selection == JOptionPane.CLOSED_OPTION)
{
System.out.println("JOptionPane closed deliberately.");
}
}
});
frame.add(contentPane, BorderLayout.CENTER);
frame.add(button, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel getOptionPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 2, 5, 5));
JLabel lineNumberLabel = new JLabel("Enter Line Number : ");
lineField = new JTextField(10);
JLabel colourLabel = new JLabel("Select One Colour : ");
cbox = new JComboBox(colourNames);
panel.add(lineNumberLabel);
panel.add(lineField);
panel.add(colourLabel);
panel.add(cbox);
return panel;
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TextHighlight().createAndDisplayGUI();
}
});
}
}
以下是它的输出:
如果无法选择TextArea to TextField原因是按钮单击会导致JTextArea失去焦点,因此无法显示其选择。
在按钮上单击事件使用
btnImport.transferFocusBackward()代码>以解决问题。如果无法选择TextArea to TextField原因是按钮单击会导致JTextArea失去焦点,因此不会显示其选择。
在按钮上单击事件使用btnImport.transferFocusBackward()代码>以解决问题。请执行以下操作:
这是java的文本区域swing
JTextArea area = new JTextArea();
int startIndex = area.getLineStartOffset(2);
int endIndex = area.getLineEndOffset(2);
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
area.getHighlighter().addHighlight(startIndex, endIndex, painter);
这样做:
这是java的文本区域swing
JTextArea area = new JTextArea();
int startIndex = area.getLineStartOffset(2);
int endIndex = area.getLineEndOffset(2);
painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
area.getHighlighter().addHighlight(startIndex, endIndex, painter);
你试过这篇精彩的文章吗,-1因为你没有研究这篇文章。谷歌上出现的第一件事是一段代码片段,它很管用。我试过了,但它们并没有解决我突出显示某一行的问题,我正在尝试获取某一行并突出显示它“仍然不明白”你知道如何提问吗?如果是,请添加一个,并使其具体化。“它们不能解决我突出显示特定行的问题”,这只有在行不换行的情况下才有意义。顺便说一句,如果你“无法让它工作”,你最好发布一份你尽了最大努力的报告。我看不出任何有能力这样做的人会对这个非常具体的问题给出答案。“我已经尝试了你发布的那些链接”1)除了我之外,没有人收到过这条评论的通知。2) 我们不是通灵者。出于这个原因,这是一个非常好的主意,提及你已经尝试了什么,你看到的线程,为什么他们没有满足规范(等等)。所以这不是一个服务台,而是一个问答网站。更好的问题得到更好的答案。你有没有试过这篇精彩的帖子,-1因为你没有研究这篇文章。谷歌上出现的第一件事是一段代码片段,它很管用。我试过了,但它们并没有解决我突出显示某一行的问题,我正在尝试获取某一行并突出显示它“仍然不明白”你知道如何提问吗?如果是,请添加一个,并使其具体化。“它们不能解决我突出显示特定行的问题”,这只有在行不换行的情况下才有意义。顺便说一句,如果你“无法让它工作”,你最好发布一份你尽了最大努力的报告。我看不出任何有能力这样做的人会对这个非常具体的问题给出答案。“我已经尝试了你发布的那些链接”1)除了我之外,没有人收到过这条评论的通知。2) 我们不是通灵者。出于这个原因,这是一个非常好的主意,提及你已经尝试了什么,你看到的线程,为什么他们没有满足规范(等等)。所以这不是一个服务台,而是一个问答网站。更好的问题得到更好的答案。谢谢你的示例代码,这就是我所做的<代码>代码矩形油漆工红色=新矩形油漆工(Color.red);尝试{f1.textarea.getHighlighter().addHighlight(f1.textarea.getLineStartOffset(iline),f1.textarea.getLineEndOffset(iline),red);//}catch(BadLocationException ex){ex.printStackTrace();}
谢谢您的示例代码,这是我所做的<代码>代码矩形油漆工红色=新矩形油漆工(Color.red);尝试{f1.textarea.getHighlighter().addHighlight(f1.textarea.getLineStartOffset(iline),f1.textarea.getLineEndOffset(iline),红色);//}catch(BadLocationException ex){ex.printStackTrace();}