Несколько раз я столкнулся с этим, я нашел, что это, методы и свойства были все почти идентичны - изменение типа объекта, было примерно всем, что я должен был сделать. Были одна или две других небольших вещи, но они обнаружились со строками, и было очевидно, что сделать с Intellisense. Я голосовал бы за движение с полностью управляемым решением, убежал бы от cdonts как можно скорее. Это даже не установлено на 03 серверах и более новое.
Взгляните на этот: http://code.google.com/p/xswingx/
Это не очень сложно реализовать самостоятельно, кстати. Пара слушателей и настраиваемый рендерер - и вуаля.
Вы можете создать свой собственный:
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
.
Для любого компонента Swing (то есть всего, что расширяет JComponent) вы можете вызвать метод setToolTipText (String).
Для получения дополнительной информации обратитесь к следующим ссылкам: