Comment effacer JTextField lorsque la souris clique sur le JTextField
J'ai besoin de faire ce programme clair, le texte du champ de texte lorsque les clics de la souris dans le champ texte. J'ai essayé quelques petites choses, mais aucun d'entre eux ont encore à travailler pour moi.
Voici le code dans son intégralité:
public class TimerClassPanel extends JFrame implements MouseListener{
public TimerClassPanel(){
setTitle("Timer Class");
setSize(WIDTH, HEIGHT);
timer = new Timer(DELAY, new TimerEventHandler());
pane = getContentPane();
pane.setLayout(null);
int r = (int)(9.0 * Math.random()) + 1;
String str2 = Integer.toString(r);
label = new JLabel(str2, SwingConstants.CENTER);
label.setSize(150,30);
label.setLocation(0,0);
textField = new JTextField();
textField.setSize(150,30);
textField.setLocation(150,0);
startB = new JButton("Start");
startbh = new StartButtonHandler();
startB.addActionListener(startbh);
startB.setSize(100,30);
startB.setLocation(0,30);
stopB = new JButton("Stop");
stopbh = new StopButtonHandler();
stopB.addActionListener(stopbh);
stopB.setSize(100,30);
stopB.setLocation(100,30);
exitB = new JButton("Exit");
ebHandler = new ExitButtonHandler();
exitB.addActionListener(ebHandler);
exitB.setSize(100,30);
exitB.setLocation(200,30);
pane.add(label);
pane.add(textField);
pane.add(startB);
pane.add(stopB);
pane.add(exitB);
timer = new Timer(DELAY, new TimerEventHandler());
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class TimerEventHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
int r = (int)(9.0 * Math.random()) + 1;
String str = Integer.toString(r);
currentNum = "";
currentNum = str;
label.setText(str);
repaint();
}
}
public class StartButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
timer.start();
}
}
public class StopButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
timer.stop();
}
}
private class ExitButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public static void main(String[] args){
TimerClassPanel timerPanel = new TimerClassPanel();
JOptionPane.showMessageDialog(null, "Type your guess (int between 1-9)" +
" in the field then press 'ENTER'");
}
@Override
public void mouseClicked(MouseEvent e) {
if( e.getX() > 150 && e.getX() < 300 && e.getY() > 0 && e.getY() < 30)
{
textField.setText("");
repaint();
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
//TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
//TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
//TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
//TODO Auto-generated method stub
}
}
source d'informationauteur Joshua Vaughan
Vous devez vous connecter pour publier un commentaire.
TL;DR
De toute façon, l'enregistrement d'un
MouseAdapter
et dominantemouseClicked
a fonctionné pour moi,J'espère que cet exemple vous avez commencé dans la bonne direction!
Vous pouvez simplement ajouter un
FocusListener
à la textfield.Cela a fonctionné pour moi. Bien sûr, le texte est effacé lorsque vous cliquez, et vous pouvez entrer un nouveau texte. Pour effacer le texte à nouveau via un clic, le textfield a à perdre le focus et ensuite reprendre le focus de la souris. Je ne suis pas entièrement sûr de ce que vous cherchez ici.
Est-il pour effacer le "conseil" du texte?
Je pense que c'est ce que vous essayez de faire...
J'ai dû le faire ainsi. Ce que j'ai fait était tout simplement faire un personnalisé
JTextField
. Quelque chose comme:Dans cette coutume TextField, j'ai simplement utilisé un
MouseListener
. Les avantages de faire un personnalisé sont:.java
fichier avec code supplémentaire qui aurait pour conséquence de rendre plus de choses à creuser par la suite. Bien queMikeWarren.getAnswer(this) extends richard.getAnswer(this)
j'ai pensé que je voudrais développer un peu plus et de montrer un peu de code j'ai effectivement utilisé dans un de mes programmes.public component swing jtextfield userInput;
à droite après l'exécution du texte:
userInput.setText(""); //vide
Cela devrait le faire.
vous pouvez essayer cette approche de trop.