2014-01-30 2 views
2

글자 사전 목록을 사용하여 선행 입력 기능을 추가하는 JComboBox가 있습니다. 사용자가 문자열을 입력하고 앞뒤를 보길 원합니다 (이것은 Glazedlists 덕분에 작동합니다). 그러나 사용자가 콤보 상자의 아래쪽 화살표를 클릭하고 드롭 다운 목록을 검사 할 수 없도록하고 싶습니다. 아래쪽 화살표를 보이지 않게하고 콤보 상자를 편집 가능하게 만들어 JTextField와 비슷하게 만들었습니다. 그러나 아래쪽 화살표가 있던 곳 위로 마우스를 가져 가서 클릭 할 수 있습니다. 드롭 다운이 나타납니다. '클릭하여 드롭 다운'기능을 제거하기 위해 무엇을 변경하거나 어떤 메소드를 재정의합니까?JComboBox의 '클릭하고 드롭 다운'기능을 어떻게 제거합니까?

ComboBox<String> box = new ComboBox<String>(); 
box.setEditable(true); 
box.setUI(new BasicComboBoxUI(){ // make the down arrow invisible 
    protected JButton createArrowButton() { 
     return new JButton() { 
      public int getWidth() { 
       return 0; 
      } 
     }; 
    } 
}); 

SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
     Object[] elements = new Object[] {"java", "perl", "python", "haskell", "erlang", "groovy"}; 
     AutoCompleteSupport.install(box, GlazedLists.eventListOf(elements));  
    } 
}); 

답변

2

재정 JButton#addMouseListener :

JComboBox<String> box = new JComboBox<>(); 
box.setEditable(true); 
box.setUI(new BasicComboBoxUI() { // make the down arrow invisible 
    protected JButton createArrowButton() { 
     return new JButton() { 
      public int getWidth() { 
       return 0; 
      } 

      @Override 
      public synchronized void addMouseListener(MouseListener l) { 
      } 
     }; 
    } 
});