Java JTextField с входной подсказкой

Несколько раз я столкнулся с этим, я нашел, что это, методы и свойства были все почти идентичны - изменение типа объекта, было примерно всем, что я должен был сделать. Были одна или две других небольших вещи, но они обнаружились со строками, и было очевидно, что сделать с Intellisense. Я голосовал бы за движение с полностью управляемым решением, убежал бы от cdonts как можно скорее. Это даже не установлено на 03 серверах и более новое.

42
задан Yugerten 10 September 2018 в 18:56
поделиться

3 ответа

Взгляните на этот: http://code.google.com/p/xswingx/

Это не очень сложно реализовать самостоятельно, кстати. Пара слушателей и настраиваемый рендерер - и вуаля.

15
ответ дан 26 November 2019 в 23:29
поделиться

Вы можете создать свой собственный:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.*;

public class Main {

  public static void main(String[] args) {

    final JFrame frame = new JFrame();

    frame.setLayout(new BorderLayout());

    final JTextField textFieldA = new HintTextField("A hint here");
    final JTextField textFieldB = new HintTextField("Another hint here");

    frame.add(textFieldA, BorderLayout.NORTH);
    frame.add(textFieldB, BorderLayout.CENTER);
    JButton btnGetText = new JButton("Get text");

    btnGetText.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String message = String.format("textFieldA='%s', textFieldB='%s'",
            textFieldA.getText(), textFieldB.getText());
        JOptionPane.showMessageDialog(frame, message);
      }
    });

    frame.add(btnGetText, BorderLayout.SOUTH);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.pack();
  }
}

class HintTextField extends JTextField implements FocusListener {

  private final String hint;
  private boolean showingHint;

  public HintTextField(final String hint) {
    super(hint);
    this.hint = hint;
    this.showingHint = true;
    super.addFocusListener(this);
  }

  @Override
  public void focusGained(FocusEvent e) {
    if(this.getText().isEmpty()) {
      super.setText("");
      showingHint = false;
    }
  }
  @Override
  public void focusLost(FocusEvent e) {
    if(this.getText().isEmpty()) {
      super.setText(hint);
      showingHint = true;
    }
  }

  @Override
  public String getText() {
    return showingHint ? "" : super.getText();
  }
}

Если вы все еще используете Java 1.5, замените this.getText (). IsEmpty () на this .getText (). length () == 0 .

54
ответ дан 26 November 2019 в 23:29
поделиться

Для любого компонента Swing (то есть всего, что расширяет JComponent) вы можете вызвать метод setToolTipText (String).

Для получения дополнительной информации обратитесь к следующим ссылкам:

3
ответ дан 26 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: