2014-11-26 5 views
1

문제가 있습니다. 나는 2 개의 텍스트 박스를 가진 간단한 JFrame을 디자인했다. JFrame을 로딩 할 때 나는 VirtualKeyboard을로드하는데 이는 JDialog 폼입니다. 문제는 프레임과 키 보더가 모두 존재하지만 JFrame에서는 텍스트 필드를 클릭 할 수 없다는 것입니다. keybord를 닫으면 JFrame을 사용할 수 있습니다. 키보드를 열면 JFrame에 어떻게 액세스 할 수 있습니까?배경 프레임의 JtextField에 포커스를 맞추는 방법?

JFrame 부하는 내가 부르고 때 이것은 내 JFrame의입니다 JDialog follows_

로 : 내가 할 무엇

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; 

:이 JDialog를 인 내 VirtualKeybord

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; 

} 

입니다 텍스트 필드를 사용하여 키보드와 JFrame에 모두 액세스 할 수 있어야합니다.

+1

어떤 아이디어를 어떻게, 어디서, (왜) 코딩 뭐죠, 불쌍한 내 영어에 대한 – mKorbel

+0

@mKorbel 죄송하는'JFrame' 폼 TestText 작성이 코드. 'vk'는'JDialog' 형태의'VirtualKeyboard'의 객체입니다. – Raghu

+0

'main()'전에 객체 vk를'vk = new KeyBoard (new javax.swing.JFrame(), true);' – Raghu

답변

1

문제는 새 프레임을 KeyBoard 대화 상자의 부모로 설정한다는 것입니다. 이렇게하면 키보드가 닫힐 때까지 키보드가 jframe을 차단합니다. 여러 가지 방법으로 문제를 해결할 수 있습니다.

1) 모달을 false로 설정할 수 있습니다. 이것은 독립적 인 새로운 프레임을 생성

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

을 : 당신은 부모로서 null 키보드를 초기화하기와 별도로 프레임을 시작할 수 있습니다

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

2) : 이것은 부모를 차단하지 않아야 대화 상자를 알려줍니다 키보드의

다음
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; 
} 

당신은 또한 수있어 :

3) 또 다른 방법은 당신이 다음과 같이 부모 이외의 다른 변수에 추가해야합니다 JFrame의 키보드는 이전에 생성 알고, 원하는 경우입니다 이 같은 새로운 차단 해제 키보드 만드는 :

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

첫 번째 방법을 권하고 싶습니다. 훨씬 더 깨끗합니다. –

+1

대단히 감사합니다. 저는 첫 번째 방법을 사용했습니다. . – Raghu