[英]How to clear JTextField when mouse clicks the JTextField
當鼠標在該文本字段中單擊時,我需要使該程序清除文本字段中的文本。 我嘗試了一些東西,但沒有一個還沒有為我工作。
以下是完整的代碼:
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
}
}
TL; DR
無論如何,注冊MouseAdapter
並覆蓋mouseClicked
對我MouseAdapter
,
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class ClickAndClearDemo {
private static void createAndShowGUI(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
final JTextField textField = new JTextField("Enter text here...");
textField.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
textField.setText("");
}
});
frame.add(textField);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
createAndShowGUI();
}
});
}
}
我希望這個例子讓你開始朝着正確的方向前進!
您只需將FocusListener
添加到文本字段即可。
final JTextField textField = new JTextField("Enter text here...");
textField.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent e){
textField.setText("");
}
});
這對我有用。 當然,單擊時會清除文本,您可以輸入新文本。 要通過單擊再次清除文本,文本字段必須失去焦點,然后從鼠標重新獲得焦點。 我不完全確定你在這里尋找什么。
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class ClickTextField extends JTextField implements MouseListener{
public static void main(String[] args) {
new ClickTextField();
}
public ClickTextField() {
addMouseListener(this);
JFrame J = new JFrame();
J.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
J.setSize(100,100);
J.getContentPane().add(this);
setText("Texty text...");
J.show();
}
@Override
public void mouseClicked(MouseEvent e) {
setText("");
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
是要清除'提示'文字嗎?
我想這就是你要做的......
textField.addMouseListener(new MouseAdapter())
{
public void mouseClicked(MouseEvent e)
{
if(textField.getText().equals("Default Text"))
{
textField.setText("");
repaint();
revalidate();
}
}
});
我也必須這樣做。 我所做的只是制作一個自定義的JTextField
。 就像是:
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
@SuppressWarnings("serial")
public class InputField extends JTextField implements MouseListener,ActionListener
{
public InputField(String text)
{
super(text);
super.setHorizontalAlignment(RIGHT);
super.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e)
{
// TODO Auto-generated method stub
if (getText().equals("0.0"))
{
setText("");
}
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
// if the mouse is pressed and "0.0" is the text, we erase the text
if (getText().equals("0.0"))
{
setText("");
}
}
@Override
public void mouseReleased(MouseEvent e)
{
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent event)
{
//if the user clicked the right mouse button
if (javax.swing.SwingUtilities.isRightMouseButton(event))
{
//create (and show) the popup
createPopup().show(event.getComponent(), event.getX(), event.getY());
}
}
private JPopupMenu createPopup()
{
JPopupMenu popupMenu = new JPopupMenu();
//add the clearTextOption to the JPopupMenu
JMenuItem clearTextOption = new JMenuItem("Clear text");
clearTextOption.addActionListener(this);
popupMenu.add(clearTextOption);
return popupMenu;
}
@Override
public void actionPerformed(ActionEvent arg0) {
//clear the TextField
setText("");
}
} //end custom TextField
在這個自定義TextField中,我只使用了一個MouseListener
。 制作自定義產品的優點是:
.java
文件中加入額外的代碼,這些代碼可以在以后挖掘更多內容。 雖然MikeWarren.getAnswer(this) extends richard.getAnswer(this)
,但我想我會詳細說明一下,並在我的一個程序中顯示一些我實際使用過的代碼。 public JTextField userInput;
在執行文本后立即:
userInput.setText( “”); //空
這應該做。
jTextField2.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton()==1) {
jTextField2.setText("");
}//3 = for right click
//2 for middlemouse
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
你也可以嘗試這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.