【问题标题】:Set hilighting color in jTextField在 jTextField 中设置高亮颜色
【发布时间】:2013-10-24 08:38:38
【问题描述】:

我正在开发一个 Java Swing 应用程序。这个应用程序允许用户使用基本的命令行。例如,用户只需键入<strong>add "Something to be added."</strong>即可添加事件。当用户键入此命令时,我想突出显示<strong>add</strong>。任何人都可以实现一个 jTextField。

【问题讨论】:

    标签: java swing jtextfield document swing-highlighter


    【解决方案1】:

    一个想法是使用StyleDocumentDocumentFilter

    这实际上是基于question,但我不确定是否可以尝试使用JTextField

    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.GridBagLayout;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.text.AbstractDocument;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;
    import javax.swing.text.DefaultStyledDocument;
    import javax.swing.text.DocumentFilter;
    import javax.swing.text.DocumentFilter.FilterBypass;
    import javax.swing.text.JTextComponent;
    import javax.swing.text.SimpleAttributeSet;
    import javax.swing.text.StyleConstants;
    
    public class TextFieldHighlighter {
    
        public static void main(String[] args) {
            new TextFieldHighlighter();
        }
    
        public TextFieldHighlighter() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JTextField field = new JTextField(new DefaultStyledDocument(), null, 20);
    
                    ((AbstractDocument) field.getDocument()).setDocumentFilter(new HighlightDocumentFilter(field));
                    JFrame frame = new JFrame("Test");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new GridBagLayout());
                    frame.add(field);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
    
            });
        }
    
        public class HighlightDocumentFilter extends DocumentFilter {
    
            private DefaultHighlightPainter highlightPainter = new DefaultHighlightPainter(Color.YELLOW);
            private JTextComponent field;
            private SimpleAttributeSet background;
    
            public HighlightDocumentFilter(JTextComponent field) {
                this.field = field;
                background = new SimpleAttributeSet();
                StyleConstants.setBackground(background, Color.RED);
            }
    
            @Override
            public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
                super.insertString(fb, offset, text, attr);
            }
    
            @Override
            public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
                super.remove(fb, offset, length);
            }
    
            @Override
            public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
    
                String match = "and";
    
                super.replace(fb, offset, length, text, attrs);
    
                int startIndex = offset - match.length();
                if (startIndex >= 0) {
    
                    String last = fb.getDocument().getText(startIndex, match.length()).trim();
                    if (last.equalsIgnoreCase(match)) {
    
                        field.getHighlighter().addHighlight(startIndex, startIndex + match.length(), highlightPainter);
    
                    }
    
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      相关资源
      最近更新 更多