How to override DefaultCaret#setBlinkRate()

后端 未结 3 1245
有刺的猬
有刺的猬 2020-12-04 02:56
  • I have an problem with Caret, Caret didn\'t blink without focusGained(see code in Swing Action) to 2nd. JTextField and back to 1st. JTextField

  • how

3条回答
  •  自闭症患者
    2020-12-04 03:05

    But your previous code works OK if setBlinkRate(500); is placed in HighlightCaret class constructor:

    class HighlightCaret extends DefaultCaret {
    
        private static final Highlighter.HighlightPainter unfocusedPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
        private static final Highlighter.HighlightPainter focusedPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
        private static final long serialVersionUID = 1L;
        private boolean isFocused;
    
        HighlightCaret(){
         setBlinkRate(500);//Placed here
        }
    
        @Override
        protected Highlighter.HighlightPainter getSelectionPainter() {
           // setBlinkRate(500); // otherwise is disabled, stopped
            return isFocused ? focusedPainter/*super.getSelectionPainter()*/ : unfocusedPainter;
        }
    
        @Override
        public void setSelectionVisible(boolean hasFocus) {
            if (hasFocus != isFocused) {
                isFocused = hasFocus;
                super.setSelectionVisible(false);
                super.setSelectionVisible(true);
            }
        }
    }
    

    Tested in Java7 WinXP. Have you tried it?

提交回复
热议问题