2013-08-14 1 views
0

Я пытаюсь сосредоточиться на JTextField в JDialog; Я пробовал все предложения в this link после того, как выискивал подобные вопросы, но ни одно из предложений не работало.Невозможно сфокусироваться на JTextField в JDialog

Компонент, на котором я пытаюсь сосредоточиться, создается в классе под названием «InputTaskWindow», и я пытаюсь создать диалог из класса «MainWindow». Вот где проблема (это в «MainWindow»):

public class NewTask extends AbstractAction { 

JList mTaskList; 
JTextArea mDetailsTextArea; 

public NewTask (JList tl, JTextArea dta){ 
    mTaskList = tl; 
    mDetailsTextArea = dta; 
} 

public void actionPerformed(ActionEvent e) { 
    int option = 0; 
    InputTaskWindow inputTaskWindow = new InputTaskWindow(); 
    JOptionPane optionPane = new JOptionPane(inputTaskWindow.createComponents(), JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 

    JDialog dialog = optionPane.createDialog("New Task"); 

    dialog.setSize(200, 200); 

    dialog.pack(); 

    ((JTextField) inputTaskWindow.getComponent(inputTaskWindow.NAMETF)).requestFocus(); 

    dialog.setVisible(true); 

    if (optionPane.getValue() != null){ 
     option = (Integer)optionPane.getValue(); 
    } 

    if (option == JOptionPane.OK_OPTION){ 
     Task t = inputTaskWindow.getTask(); 
     activeDay.addTask(t); 
    } 

    populateLists(mTaskList); 
} 

Я поставил JTextField Я пытаюсь получить доступ в массиве JComponents в классе GUI; Я получил доступ к другим компонентам с помощью метода getComponents(), поэтому я знаю, что это указывает на правильную вещь.

Я попробовал requestFocus(), requestFocusInWindow(), добавив в класс NewTask класс ancestorListener и добавив ancestorListener после создания JTextField в InputTaskWindow (в обоих случаях я добавляю его в JTextField и используя класс RequestFocusListener, описанный в ссылке). Любая помощь приветствуется.

+1

Я думаю, вы должны исправить свои соглашения об именах, чтобы их было легче читать. Кроме того, вместо вызова 'requestFocus', попробуйте вызвать' setFocusable (true) '. –

+0

Я не вижу, где вы пытаетесь добавить 'JTextField' в' JDialog' –

+0

Maxim: я не добавляю его прямо; его в JPanel, созданном в InputTaskWindow, который передается в диалог в createComponents(). Нужно ли сначала сосредоточиться на JPanel? – LMNOP

ответ

0

Я не определил, в чем проблема, но я решил отказаться от этого кода. Я сильно подозреваю, что проблема связана с функцией обновления, а не с недоразумением методов фокуса (мое первое предположение). Код слишком запутан, чтобы сортировать, поэтому я рассматриваю вопрос закрытым.