单击时清除 JTextField 内容



所以我构建了一个非常基本的 Web 浏览器 - 当用户单击地址栏时,我拼命尝试删除地址栏的内容(JTextField )默认情况下会出现一些文本。 任何建议不胜感激。

祝你有美好的一天!

我的代码

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Web_Browser extends JFrame {
    private final JTextField addressBar;
    private final JEditorPane display;
    // Constructor 
    public Web_Browser() {
        super("Web Browser");
        addressBar = new JTextField("Click & Type Web Address e.g. http://www.google.com");        
        addressBar.addActionListener(
                new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent event) {
                           loadGo(event.getActionCommand());
                    }
                }
        );
        add(addressBar, BorderLayout.NORTH);
        display = new JEditorPane(); 
        display.setEditable(false);
        display.addHyperlinkListener(
                new HyperlinkListener(){
                    @Override
                    public void hyperlinkUpdate(HyperlinkEvent event){
                        if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED){
                            loadGo(event.getURL().toString());
                        }
                    }
                }
        );
        add(new JScrollPane(display), BorderLayout.CENTER);
        setSize(500,300);
        setVisible(true);
    }
    // loadGo to sisplay on the screen
    private void loadGo(String userText) {
        try{
           display.setPage(userText);
           addressBar.setText(userText);
        }catch(IOException e){
            System.out.println("Invalid URL, try again");
        }
    }
}

使用 FocusListener。在焦点增益上,全选。

  addressBar.addFocusListener(new FocusAdapter() {
     @Override
     public void focusGained(FocusEvent e) {
        JTextComponent textComponent = (JTextComponent) e.getSource();
        textComponent.selectAll();
     }
  });

例如:

import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.*;
import javax.swing.text.JTextComponent;
@SuppressWarnings("serial")
public class FocusExample extends JPanel {
   private static final int TF_COUNT = 5;
   private JTextField[] textFields = new JTextField[TF_COUNT];
   public FocusExample() {
      for (int i = 0; i < textFields.length; i++) {
         textFields[i] = new JTextField("Foo " + (i + 1), 10);
         textFields[i].addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e) {
               JTextComponent textComponent = (JTextComponent) e.getSource();
               textComponent.selectAll();
            }
         });
         add(textFields[i]);
      }
   }
   private static void createAndShowGui() {
      FocusExample mainPanel = new FocusExample();
      JFrame frame = new JFrame("FocusExample");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

这使用户可以选择保留以前的文本,添加到以前的文本,或者只是通过键入来覆盖它。

new JTextField("Click & Type Web Address e.g. http://www.google.com");  

也许您需要文本提示,它实际上不会在文本字段中存储任何文本。它只是为用户提供文本字段用途的提示。

这是有益的,这样您就不会生成文档事件等,因为您实际上并没有更改文档。

添加一个 mouseListener 而不是 actionListener 方法。

addressBar.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
    addressBar.setText("");
}

最新更新