2009-03-13 6 views
0

JScrollPane 내부에 구성 요소 (JPanel의 파생 요소)를 추가하고 있습니다. 구성 요소가 때때로 크기를 변경하기 때문에JScrollPane의 구성 요소가 KeyEvents 수신을 중지합니다.

scrollPane = new JScrollPane(component); 

, 나는이 가끔해야 할 일 :

SwingUtilities.invokeLater(new Runnable(){ 

      public void run() 
      { 
      scrollPane.getViewport().setView(component); 
      component.repaint(); 
      } 
    }); 

또한, 구성 요소가 KeyEvent를

component.addKeyListener(this); 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      component.setFocusable(true); 
      component.requestFocusInWindow();  
     } 
    }); 

그러나, 구성 요소가 결코 모든 키 이벤트를 수신하지를받을 수 있습니다 . keyTyped()의 코드도 실행되지 않습니다 (나는 System.out.println()을 넣었습니다). 디버그 모드에서 AWT 이벤트 스레드가 키 이벤트를 받아들이면 주 스레드를 일시 중지 할 수 있습니다. 그러나 정상적인 실행 중에는 작동하지 않습니다.

누구든지 내가 뭘 잘못하고 있다고 제안 할 수 있습니까?

+0

왜 다시보기를 설정해야하는지 자세히 설명해 주시겠습니까? 구성 요소가 크기가 올바르게 변경되지 않습니까? java.swing.Scrollable 구현을 고려 했습니까? – ordnungswidrig

+0

구성 요소가 크기를 올바르게 처리 할 수있는 방법을 알려주십시오. 마치 ... 계단은 뭐니? –

+0

scrollPane.getViewport()를 대체합니다. setView (구성 요소); scrollable과 함께 component.revalidate()를 사용하여 내 문제를 해결했습니다. 감사! –

답변

0

내 구성 요소를 java.swing.Scrollable로 바꾸고 scrollPane.getViewport().setView(component);component.revalidate으로 대체하면 내 prioblem이 해결됩니다.

감사합니다. ordnungswidrig!

관련 문제