캐럿에 문제가 있습니다. 포커스가 없으면 깜박이지 않았습니다. 스윙 액션의 코드를 참조하십시오. JTextField 및 1 등 뒤로.대체하는 방법 DefaultCaret # setBlinkRate()
JTextField를
우선 사용해, DefaultCaret # setBlinkRate()가 제대로기본적으로 (재정 캐럿없이) 캐럿이 문서의 끝 부분이며, 1 일에 점멸하는 방법에 대해 설명합니다.
- 이 win7_32b에 Java7.011가/025/Java6
테스트의 focusGained 이하 Fs, 사용자 정의도마다 같은 문제로 인해 몇 가지 표준 L & 테스트
자세한 내용은 내 질문에 대한 답변 How to retain selected text in JTextField when focus lost? 및 possible workaround by @kleopatra
내 SSCCE는
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
public class TestTextComponents {
private static final long serialVersionUID = 1L;
private Timer timer;
private JTextField jTextField0 = new JTextField();
private JTextField jTextField1 = new JTextField();
private JTextField jTextField2 = new JTextField();
private JFrame frame = new JFrame("Default Caret");
private JPanel panel = new JPanel();
public TestTextComponents() {
jTextField0.setText("jTextField0");
jTextField1.setText("jTextField1");
jTextField2.setText("jTextField2");
jTextField1.setCaret(new HighlightCaret());
jTextField2.setCaret(new HighlightCaret());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
panel.add(new JLabel("Please skip between text fields and watch persistent selection: "));
panel.add(jTextField0);
panel.add(jTextField1);
panel.add(jTextField2);
frame.add(panel);
frame.setTitle("Text component persistent selection");
frame.pack();
frame.setVisible(true);
/*timer = new javax.swing.Timer(250, updateCol());
timer.setRepeats(false);
timer.start();*/
}
private Action updateCol() {
return new AbstractAction("Hello World") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
jTextField2.grabFocus();
jTextField2.requestFocusInWindow();
jTextField1.grabFocus();
jTextField1.requestFocusInWindow();
}
};
}
private class HighlightCaret extends DefaultCaret {
private static final long serialVersionUID = 1L;
private final Highlighter.HighlightPainter unfocusedPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
private final Highlighter.HighlightPainter focusedPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE);
private boolean isFocused;
@Override
protected Highlighter.HighlightPainter getSelectionPainter() {
return isFocused ? focusedPainter /*super.getSelectionPainter()*/ : unfocusedPainter;
}
@Override
public void setSelectionVisible(boolean hasFocus) {
super.repaint();
super.setBlinkRate(500);
if (hasFocus != isFocused) {
isFocused = hasFocus;
super.setSelectionVisible(false);
super.setSelectionVisible(true);
}
}
}
public static void main(String args[]) {
/*try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
try {
for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(laf.getName())) {
UIManager.setLookAndFeel(laf.getClassName());
}
}
} catch (Exception e) {
e.printStackTrace();
}*/
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestTextComponents();
}
});
}
}
이것은 의미가 없습니다. 포커스 캐럿은 현재 키보드 포커스가있는 텍스트 구성 요소 중 하나만 표시됩니다. IMHO는 포커스가없는 필드에 캐럿을 표시하는 것을 의미하지 않습니다. 화면에 여러 개의 캐럿이 생기고 사용자가 실제로 입력하는 문자를 혼동하게됩니다. – MadProgrammer
SSCCE를 내 IDE에 복사했습니다. 이 코드를 실행할 때 어떤 행동을보고 싶은지 설명 할 수 있습니까? –
나는 무슨 일이 일어나는 지 알 겠어. 이것은 TAB을 올바르게 사용할 때만 발생합니까? –