2013-05-29 2 views
3

У меня есть кадр с некоторым JTextFields, чтобы пользователь ввел некоторые значения. Когда окно открыто, текстовые поля написаны серым цветом, что пользователь должен записать в этом контейнере, например «значение в секундах» ...JTextField: изменить цвет переднего плана и сохранить содержимое

Я хочу изменить цвет этих букв (я думаю, это на переднем плане), когда пользователь начинает писать в JTextFields и сохраняет в String то, что написано пользователем.

+0

Чтобы сохранить содержимое, написанное пользователем просто использовать 'GetText()' Чтобы изменить цвет шрифта, когда пользователь пишет просто использовать 'OnClick' событие и изменить цвет – SaintLike

+0

Это может быть полезно: http://help.aliexpress.com/new_user_guide.html //stackoverflow.com/questions/10506789/how-to-display-faint-gray-ghost-text-in-a-jtextfield/10507193#10507193 –

+0

Спасибо вам всем! – user2144555

ответ

3

Для изменения цвета вы должны ввести FocusListener, который устанавливает переднем плане setForeground(). Если вы хотите иметь строку текущего содержимого JTextField, вы можете достичь этого с помощью DocumentListener до базового Document.

Смотрите этот код в качестве примера (я использую синий и красный цвет и сохранить значение Текст tf в String содержания):

JTextField tf = new JTextFiedl(); 
tf.addFocusListener(new FocusListener() 
{ 
    @Override 
    public void focusGained(FocusEvent fe) 
    { 
     tf.setForeground(INACTIVE_COLOUR); 
    } 

    @Override 
    public void focusLost(FocusEvent fe) 
    { 
     tf.setForeground(ACTIVE_COLOUR); 
    } 
}); 

Полный рабочий пример здесь:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class TF 
{ 
    private final Color ACTIVE_COLOUR = Color.BLUE; 
    private final Color INACTIVE_COLOUR = Color.RED; 

    private String content; //text of the text field is stored here 

    private JTextField tf; 
    private JTextField lbl; 

    public TF() 
    { 
     JFrame mainFrame = new JFrame("Window"); 

     tf = new JTextField("Hint"); 
     lbl = new JTextField("click here to change focus"); 

     tf.setForeground(ACTIVE_COLOUR); 

     setListeners(); 

     mainFrame.add(tf, BorderLayout.NORTH); 
     mainFrame.add(lbl, BorderLayout.SOUTH); 
     mainFrame.pack(); 
     mainFrame.setVisible(true); 
    } 

    private void setListeners() 
    { 
     tf.addFocusListener(new FocusListener() 
     { 
      @Override 
      public void focusGained(FocusEvent fe) 
      { 
       tf.setForeground(INACTIVE_COLOUR); 
      } 

      @Override 
      public void focusLost(FocusEvent fe) 
      { 
       tf.setForeground(ACTIVE_COLOUR); 
      } 
     }); 

     tf.getDocument().addDocumentListener(new DocumentListener() 
     { 
      @Override 
      public void removeUpdate(DocumentEvent de) 
      { 
       content = tf.getText(); 
      } 

      @Override 
      public void insertUpdate(DocumentEvent de) 
      { 
       content = tf.getText(); 
      } 

      @Override 
      public void changedUpdate(DocumentEvent de) 
      { 
       content = tf.getText(); 
      } 
     }); 
    } 

    public static void main(String[] args) 
    { 
     TF tf = new TF(); 
    } 
} 
+0

Это тоже хорошая альтернатива! Более полная. – user2144555