2013-01-02 9 views
7

JLabelをクリックしてJTextFieldと置き換えたときに、それが表示されたときにすべてのテキストを自動選択する必要があります。JTextFieldが表示されたときにその内容をすべて選択するようにします

ありがとうございました。

+0

お探しの商品は見つかりましたか? http://stackoverflow.com/questions/1178312/how-to-select-all-text-in-a-jformattedtextfield-when-it-gets-focus/1178596#1178596 – SomeJavaGuy

+0

私はこの質問をする前にこれを試しましたが、この回答の問題は、それがうまくいかないことです。この回答のも​​う1つの問題は、テキストフィールドをクリックした後で、表示されていないときにのみ、テキストフィールドがフォーカスを取得することです。 –

+0

http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.htmlを参照してください。どのようにSwingコンポーネントに焦点を当てるかについて –

答えて

8

ソリューション1を:フォーカスイベントを経由して、それを実行してください。最高の解決策ではありません。

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

本当に助けてくれてありがとうございました –

+0

Thread.sleepを使う目的は何ですか?これは、通常、スイングアプリケーション内での悪い練習とみなされます – MadProgrammer

+0

これは、このクリックボタンの非表示要素のすべてを行うのではなく、遅延の後にフィールドをポップアップさせることでした。要素newelement-pop-sup-getsfocus-all-is-selected元の質問で彼が話していたこと。しかし、私は自分の投稿を編集して、それがより明確になるようにします。 – JayC667

6

JTextField.selectAll()が必要です。

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

[requestFocusInWindow()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow())と組み合わせてselectAll()を使用する必要があるようです。所望の効果を得る。私の編集で示されているように。 –

関連する問題