2013-01-02 33 views
7

Tôi có một JLabel khi bạn nhấp vào nó được thay thế bằng JTextField, tôi cần JTextField để tự động chọn tất cả văn bản của nó khi nó xuất hiện.buộc JTextField chọn tất cả nội dung của nó khi xuất hiện

Cảm ơn mọi người đã giúp đỡ.

+0

Là những gì bạn đang tìm kiếm? http://stackoverflow.com/questions/1178312/how-to-select-all-text-in-a-jformattedtextfield-when-it-gets-focus/1178596#1178596 – SomeJavaGuy

+0

Tôi đã thử điều này trước khi tôi hỏi câu hỏi này, vấn đề với câu trả lời này là nó không hoạt động. cũng là vấn đề khác với câu trả lời này là trường văn bản chỉ tập trung sau khi bạn nhấp vào văn bản và không xuất hiện khi nó xuất hiện –

+0

Xem http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html về cách tập trung vào thành phần Swing –

Trả lời

8

Giải pháp một: Do đó thông qua các sự kiện tập trung. Không phải là giải pháp tốt nhất.

public static void main(final String[] args) { 
    // simple window preparation 
    final JFrame f = new JFrame(); 
    f.setBounds(200, 200, 400, 400); 
    f.setVisible(true); 

    { // this sleep part shall simulate a user doing some stuff 
     try { 
      Thread.sleep(2345); 
     } catch (final InterruptedException ignore) {} 
    } 

    { // here's the interesting part for you, this is what you put inside your button listener or whatever 
     final JTextField t = new JTextField("Hello World!"); 
     t.addFocusListener(new FocusListener() { 
      @Override public void focusLost(final FocusEvent pE) {} 
      @Override public void focusGained(final FocusEvent pE) { 
       t.selectAll(); 
      } 
     }); 
     f.add(t); 
     f.validate(); 

     t.requestFocus(); 
    } 
} 
+0

Cảm ơn bạn đã phản hồi, nó thực sự đã giúp tôi –

+0

Mục đích của việc sử dụng Thread.sleep là gì? Điều này thường được coi là thực hành xấu trong một ứng dụng Swing – MadProgrammer

+0

Đó chỉ là để có trường bật lên sau một sự chậm trễ, thay vì làm tất cả các phần tử bấm-nút-ẩn-phần tử mới này-pop-sup-getfocus-all-is-selected mà anh đang nói về câu hỏi ban đầu. Nhưng tôi sẽ chỉnh sửa bài đăng của tôi để nó rõ ràng hơn. – JayC667

6

JTextField.selectAll() là những gì bạn cần.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class SelectAll 
{ 
    private int count = 0; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Select All"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     final JPanel contentPane = new JPanel(); 
     JButton addButton = new JButton("Add"); 
     addButton.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
       JTextField tfield = new JTextField(10); 
       tfield.setText("" + (++count));    
       contentPane.add(tfield); 
       tfield.requestFocusInWindow(); 
       tfield.selectAll(); 

       contentPane.revalidate(); 
       contentPane.repaint(); 
      } 
     }); 

     contentPane.add(addButton); 

     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 
    public static void main(String... args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new SelectAll().displayGUI(); 
      } 
     }); 
    } 
} 
+0

Có vẻ như bạn phải sử dụng selectAll() kết hợp với [requestFocusInWindow()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow()), để có được hiệu quả mong muốn. Như thể hiện trong bản chỉnh sửa của tôi. –

Các vấn đề liên quan