当一个JTextComponent中的文字被选中了一部分的时候,
该部分底色会被着色
我还使用了方法setSelectedTextColor(Color.WHITE);
目的是让选中部分的文字显示为白色现在有个问题,当这个JTextComponent失去焦点的时候(比如点击了其他组件)
被选中的部分会像没有选中一样的显示,文字也没有变成白色,底色也没有了
我现在自己写了个Highlighter,解决了底色的问题
但是文字颜色的问题还是没法解决
虽然用可以用requestFocus()来强制这个JTextComponent获得焦点,
但是这样我其它的组件就无法获得焦点了求高手指点如何在JTextComponent失去焦点时,
仍然可以让选中部分按我的需求显示出来

解决方案 »

  1.   

    try addFocusListenervoid focusLost(FocusEvent e)
      

  2.   

    我也想过监听焦点事件的
    但是很快就否定了
    监听焦点的事件我能干些什么呢?1、setSelectedTextColor(Color.WHITE) ?
    但是我本来就已经设定过这个了,只是失去焦点后文本不按选中部分颜色来显示,而是用前景色来显示的。2、setForeground(Color.WHITE) ?
    这样会造成整个文本的颜色发生变化,而不仅仅是选中的部分。
      

  3.   

    void setSelectionColor(Color c) 这个方法不行的话,那只能放弃或者寻找底层方法控制特定位置了
      

  4.   

    为了搞定这个问题
    这两天在研究BasicTextUI呢
    快吐血了,扛不住了,才来求助的
      

  5.   

    挺好奇你的问题的,在ie和eclipse里边分别试了下,ie里确实在失去焦点后选中的没有背景色,eclipse里一直有,看来这是JTextComponent的通病?
    试试这样的思路啊:
    addFocusListener
        public void focusGained(FocusEvent e)
    {
    //TODO设置你要的颜色}
        public void focusLost(FocusEvent e)

    //TODO设置你要的颜色
      

  6.   

    public void focusLost(FocusEvent e)

    //TODO设置你要的颜色
    }这里有点麻烦,
    如果是JTextPane一类的可以设置风格的JTextComponent
    我可以对选中部分进行风格变化,
    但是如果原来的字体是有粗、有细、有斜体的话那我如果统一给一个风格那颜色是一样了,
    字体的粗细斜还是不能保持原有的状态,
    那就意味着我在失去焦点的情况下,
    还得另外写一套针对不同关键字的风格变化方法然后由于在点回JTextPane的时候,会失去Selection部分,
    我就得重新对全文进行一次着色处理,这样在我本文大的时候,每次失去--获得焦点都会有顿的感觉看eclipse,肯定不是用这么笨的方法处理的
    而如果是JTextArea这样不能设置风格的
    完全无法实现手动让选中部分的颜色在失去焦点时发生变化这个问题纠结死了
      

  7.   

    public void focusLost(FocusEvent e)

    //TODO设置你要的颜色
    }这里有点麻烦,
    如果是JTextPane一类的可以设置风格的JTextComponent
    我可以对选中部分进行风格变化,
    但是如果原来的字体是有粗、有细、有斜体的话那我如果统一给一个风格那颜色是一样了,
    字体的粗细斜还是不能保持原有的状态,
    那就意味着我在失去焦点的情况……
    [/Quote]
      

  8.   

    用 JComponent 的public final void putClientProperty(Object key, Object value) 这个方法试试,"TextPane.background"和"TextPane.disabledBackground"都是key值,至于其他的,可以找找看有没有你想要,如果还是不够,再结合焦点事件监听器。