![](/img/trans.png)
[英]How to make a popup menu added to a JtextField to be invisible when the JTextField's focus is lost?
[英]How to retain selected text in JTextField when focus lost?
現在完成我的自定義菜單彈出,但問題是,如果我在JTextField
選擇一些文本並單擊鼠標按鈕以顯示彈出菜單,則焦點將轉移到彈出窗口,之前選定的文本不再突出顯示。 當焦點回到JTextField
- 所選文本將再次突出顯示。 如何在焦點丟失時突出顯示所選文本?
然后焦點轉移到彈出窗口,之前選定的文本不再突出顯示。 當焦點回到JTextField時 - 所選文本將再次突出顯示。 如何在焦點丟失時突出顯示所選文本?
DefaultCaret的代碼示例
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;
@Override
protected Highlighter.HighlightPainter getSelectionPainter() {
return isFocused ? focusedPainter/*super.getSelectionPainter()*/ : unfocusedPainter;
}
@Override
public void setSelectionVisible(boolean hasFocus) {
if (hasFocus != isFocused) {
isFocused = hasFocus;
super.setSelectionVisible(false);
super.setSelectionVisible(true);
}
}
}
與輸出
來自代碼
import java.awt.*;
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 JTextField jTextField1;
private JTextField jTextField2;
private JFrame frame = new JFrame("Default Caret");
public TestTextComponents() {
jTextField1 = new JTextField();
jTextField2 = new JTextField();
jTextField1.setText("jTextField1");
jTextField2.setText("jTextField2");
jTextField1.setCaret(new HighlightCaret());
jTextField2.setCaret(new HighlightCaret());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(new FlowLayout());
frame.add(new JLabel("Please skip between text fields and watch persistent selection: "));
frame.add(jTextField1);
frame.add(jTextField2);
frame.setTitle("Text component persistent selection");
frame.pack();
frame.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestTextComponents();
}
});
}
}
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;
@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);
}
}
}
編輯必須恢復Caret.setBlinkRate(500);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.