Как сделать фокусировку JtextField фоновой рамки?

1

Я застрял с проблемой. Я разработал простой JFrame с 2 текстовыми полями. Во время загрузки JFrame я также загружаю VirtualKeyboard который является формой JDialog. Проблема теперь в том, что и кадр, и keybord есть, но в JFrame я не могу щелкнуть по текстовым полям. Если я закрою keybord, я могу использовать JFrame. Как я могу получить доступ к JFrame при открытии клавиатуры.

Когда JFrame нагрузки я называю JDialog как follows_

Это мой JFrame:

public class TestText extends javax.swing.JFrame {

static KeyBoard vk;

/**
 * Creates new form TestText
 */
public TestText() {
    initComponents();

    vk = new KeyBoard(new javax.swing.JFrame(), true);
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TestText().setVisible(true);
             vk.setLocation(30,500);
            vk.setVisible(true);
        }
    });
}

private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;

}

Это мой VirtualKeybord который является JDialog:

public class KeyBoard extends javax.swing.JDialog {

/**
 * Creates new form KeyBoard
 */
public KeyBoard(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    setFocusableWindowState(false);
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    initComponents();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if(evt.getSource()==jButton2)
    {
        try{
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_A); 
            }
            catch(Exception E){}
    }
} 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     if(evt.getSource()==jButton1)
    {
        try{
            Robot robot = new Robot(); 
            robot.keyPress(KeyEvent.VK_TAB); 
            }
            catch(Exception E){}
    }
}  
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;

Что мне нужно изменить, что можно получить доступ как к клавиатуре, так и к JFrame с текстовыми полями?

  • 1
    понятия не имею, как, где, (почему) что закодировано,
  • 0
    @mKorbel Извините за мой плохой английский, это код , написанный в JFrame форме TestText. vk - это объект VirtualKeyboard который является формой JDialog .
Показать ещё 8 комментариев
Теги:
swing
jframe
jdialog

1 ответ

1
Лучший ответ

проблема заключается в том, что вы устанавливаете новый кадр в качестве родителя вашего KeyBoard Dialog. Если вы это сделаете, клавиатура блокирует jframe, пока не будет закрыта. Существует несколько способов решить эту проблему.

1) Вы можете установить модальное значение false. Это говорит о том, что он не должен блокировать родителя:

vk = new KeyBoard(new javax.swing.JFrame(), false);

2) Вы можете инициализировать клавиатуру с нулевым именем в качестве ее родителя и начать кадр отдельно:

public TestText() {
    initComponents();
    new javax.swing.JFrame();
    vk = new KeyBoard(null, true);
}

Это создает новый кадр, не зависящий от вашей клавиатуры.

3) Еще один способ - если вы хотите, чтобы ваша клавиатура знала перед созданным jframe, вы должны добавить его к другой переменной, чем родительская, например:

public class KeyBoard extends javax.swing.JDialog {

    /**
     * Creates new form KeyBoard
     */
    public KeyBoard(java.awt.Frame parent, boolean modal) {
        super(null, modal);

        this.frame = parent;

        setFocusableWindowState(false);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        initComponents();
    }

    //Here are the other methods...

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private java.awt.Frame frame;
}

Затем вы также можете создать новую разблокирующую клавиатуру следующим образом:

vk = new KeyBoard(new javax.swing.JFrame(), false);
  • 0
    Я бы порекомендовал первый способ, он намного более чистый.
  • 1
    Спасибо большое, я использовал первый метод. ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню