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 đỡ.
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 đỡ.
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();
}
}
Cảm ơn bạn đã phản hồi, nó thực sự đã giúp tôi –
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
Đó 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
Lớp JTextField chứa các phương pháp trong API của nó cho việc này.
này có thể giúp:
http://forums.codeguru.com/showthread.php?308517-How-do-you-highlight-the-text-in-a-JTextfield
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();
}
});
}
}
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. –
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
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 –
Xem http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html về cách tập trung vào thành phần Swing –