Не устанавливается фокус на компонент - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Из главного окна при нажатии кнопки вызываю диалоговое окно. Нужно, чтобы каждый раз при показе диалога (d.setVisible(true)) получало фокус текстовое поле tfName. Сейчас пришлось для этой простой вещи реализовывать интерфейс WindowListener и все его методы. Но и это не помогает. Может, есть какой-то более простой, а главное, эффективный способ? Главное окно:
class MainWindow extends JFrame{
    private MyDialogWindow d;
    
    public MainWindow(String s){
        super(s);
        
        // Тут размещаются какие-то компоненты      
        JButton btnAddNewRecord = new JButton("Добавить"); add(btnAddNewRecord);         
        // Обработчик кнопки, который вызывает диалоговое окно
        btnAddNewRecord.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent event) {
                if(d == null)                   
                    d = new MyDialogWindow(null, "Добавление записи");
                d.setVisible(true);             
            }
        }); 
        
        setSize(480, 510);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
    }   
}
 
public class DialogDemo{
    public static MainWindow mainwnd;
    public static void main(String[] args){
        mainwnd = new MainWindow("Главное окно");
    }   
}
Окно диалога:
class MyDialogWindow extends JDialog implements WindowListener {
    public TextField tfName;
    public AddPhoneRecordWindow(Frame f, String s){
        super(f, s, true);
        setLayout(null);        
        
        tfName = new TextField(30);
        tfName.setBounds(130, 30, 160, 25); add(tfName);
        //Какие-то другие компоненты
                
    }
 
    @Override
    public void windowActivated(WindowEvent arg0) {
        // TODO Auto-generated method stub
        tfName.requestFocus();
    }
 
    @Override
    public void windowClosed(WindowEvent arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void windowClosing(WindowEvent arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void windowDeactivated(WindowEvent arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void windowDeiconified(WindowEvent arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void windowIconified(WindowEvent arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void windowOpened(WindowEvent arg0) {
        // TODO Auto-generated method stub
        tfName.requestFocus();
    }
    
}

Решение задачи: «Не устанавливается фокус на компонент»

textual
Листинг программы
JTextField tfName;
 
public MyDialogWindow(String title){
setTitle(title);
tfName = new JTextField(30);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5