2012-04-26 1 views
0

Спасибо, ребята, за ваш ответ. Я буду использовать коды ниже (импорт игнорируется), чтобы показать мою проблему. (коротко, вызовите указанное текстовое поле как «поле1», вызовите приведенное ниже текстовое поле как «поле2»). В dilaog, когда я ввожу в поле 1 и щелкните поле2, поле2 отобразит текст в поле1. , но если я вхожу в поле1 и покажу его всплывающее меню для копирования/вставки, я НЕ хочу показывать текст поля1 в поле2.Когда отображается всплывающее меню для текстового поля, как запретить focusLost текстового поля?

public class MyDialog extends JDialog { 
    public MyDialog() { 
     final JTextField name = new JTextField(20); 
     name.setEditable(true); 
     final JTextField clone = new JTextField(20); 
     clone.setEditable(true); 
     getContentPane().setLayout(new GridLayout(2, 1)); 
     getContentPane().add(name); 
     getContentPane().add(clone); 

     name.addFocusListener(new FocusAdapter() { 
      public void focusLost(FocusEvent e) { 
       clone.setText(name.getText()); 
      } 
     }); 
     addPopupMenu(name); 
    } 

    private void addPopupMenu(final JTextField name) { 
     JPopupMenu menu = new JPopupMenu(); 
     JMenuItem copyItem = menu.add(name.getActionMap().get(DefaultEditorKit.copyAction)); 
     copyItem.setText("copy"); 
     JMenuItem pasteItem = menu.add(name.getActionMap().get(DefaultEditorKit.pasteAction)); 
     pasteItem.setText("paste"); 
     name.setComponentPopupMenu(menu); 
    } 

    public static void main(String args[]){ 
     MyDialog dlg = new MyDialog(); 
     dlg.setSize(500, 200); 
     dlg.setVisible(true); 
    } 
} 
+0

для лучшей помощи рано изменить вопрос с [SSCCE] (http://sscce.org/) – mKorbel

+0

I не думайте, что вам нужно вмешиваться в фокусировку ваших компонентов, пожалуйста, покажите нам, что ваша проблема, и дайте небольшой пример того, что не работает для вас. – Terraego

+0

Попробуйте ['setComponentPopupMenu()'] (http://docs.oracle.com /javase/6/docs/api/javax/swing/JComponent.html#setComponentPopupMenu%28javax.swing.JPopupMenu%29). – trashgod

ответ

0

Это останавливает всплывающее меню от захвата фокуса от текстового поля: menu.setFocusable(false);

Смежные вопросы