2012-04-25 75 views
2

我正在编写一个Swing应用程序,我有一位阅读圣经的朋友。这个应用程序通过文本或段落进行搜索。在JTextField中使用自定义插入符号进行辅助功能

但我的朋友只能看到大字体大小对比色。我将textField的插入符的颜色更改为setCaretColor,其中用户输入要搜索的文本。

尖号秀一样具有相同HIGHT字体矩形,但宽度少,我认为我的朋友罐头看不到。

是否有任何方法可以改变插入宽度以显示更大?

+4

为什么不直接使用主机平台的放大功能? – trashgod 2012-04-25 15:26:28

+0

lookAndFeel似乎不响应Windows主题的更改... – 2012-04-25 15:42:12

+1

这不是@trashgod所指的主题,它是(Windows 7)控制面板|外观和个性化| ..显示或..易于访问居中/使电脑更容易看/打开放大镜。 – 2012-04-26 05:27:27

回答

4

您是否看到过遍布互联网的Oreilly Swing书中的这个例子?看起来你可以定制插入符号很多。

http://www.java2s.com/Code/Java/Swing-JFC/Fanciercustomcaretclass.htm

+0

这个例子很好,但我需要另一件事。我曾在Microsoft Word中看到过一件事。如果你有一个字体大小,你有一个字体高度相同的插入符号。当您更改字体的大小时,宽度脱字符不会改变,只有高度 – 2012-04-25 21:27:43

4

也许有三种方式我怎么能重现Caret和选择日JTextComponents

import java.awt.Color; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.text.DefaultCaret; 
import javax.swing.text.DefaultHighlighter; 
import javax.swing.text.Highlighter; 

public class TextFieldExample extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public TextFieldExample() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     JPanel panel = new JPanel(); 
     JTextField tfield = new JTextField(10); 
     tfield.setText("default text"); 
     final JTextField tfield2 = new JTextField(10); 
     tfield2.setText("default text"); 
     tfield2.addFocusListener(new FocusListener() { 

      public void focusGained(FocusEvent fe) { 
       tfield2.setCaretPosition(tfield2.getDocument().getLength()); 
      } 

      public void focusLost(FocusEvent fe) { 
      } 
     }); 
     JTextField tfield3 = new JTextField(10); 
     tfield3.setText("default text"); 
     tfield3.setCaret(new HighlightCaret()); 
     panel.add(tfield); 
     panel.add(tfield2); 
     panel.add(tfield3); 
     add(panel); 
     pack(); 
     setVisible(true); 
    } 

    class HighlightCaret extends DefaultCaret { 

     private final Highlighter.HighlightPainter unfocusedPainter = 
       new DefaultHighlighter.DefaultHighlightPainter(new Color(230, 230, 210)); 
     private static final long serialVersionUID = 1L; 
     private boolean isFocused; 

     @Override 
     protected Highlighter.HighlightPainter getSelectionPainter() { 
      return isFocused ? super.getSelectionPainter() : unfocusedPainter; 
     } 

     @Override 
     public void setSelectionVisible(boolean hasFocus) { 
      if (hasFocus != isFocused) { 
       isFocused = hasFocus; 
       super.setSelectionVisible(false); 
       super.setSelectionVisible(true); 
      } 
     } 
    } 

    public static void main(String... args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       TextFieldExample textFieldExample = new TextFieldExample(); 
      } 
     }); 
    } 
} 
+0

我使用此代码测试,并且我看到脱字符'rentangle'的宽度在所有文本字段中似乎都是相同的。 – 2012-04-25 21:23:21