2017-01-29 2 views
0

Как видно всплывающее меню редактируемого JComboBox. То есть, когда я ввожу какой-либо текст в JComboBox, он должен отображать его элементы списка всплывающих окон. Вот мой код. Я добавил ключ Listner, в который я добавил inved showpopup() и setpopupvisible (true). Но он ничего не делает.Как видно всплывающее меню jcombobox

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JComboBox; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class Test extends JFrame { 

private JPanel contentPane; 
private JComboBox comboBox; 
private JTextField textField; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Test frame = new Test(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Test() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    comboBox = new JComboBox(new Object[] {"Ester", "Jordi", "Jordina", "Jorge", "Sergi"}); 
    comboBox.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent arg0) { 
      comboBox.showPopup(); 
      comboBox.setPopupVisible(true); 
     } 
    }); 
    comboBox.setEditable(true); 
    comboBox.setBounds(10, 11, 414, 20); 
    contentPane.add(comboBox); 
} 
} 
+0

В принципе, ваш KeyListener должен быть присоединен к физическому редактор, содержащийся в comboBox, но я бы отговорил использовать KeyListener вместо DocumentListener или DocumentFilter, в зависимости от ваших намерений. – MadProgrammer

+0

Нулевые макеты, как правило, представляют собой плохую идею, которая представляет собой высокий уровень проблем и постоянное обслуживание. – MadProgrammer

ответ

1

Я сделал некоторую работу и как-то заставил ее работать. Но это не рекомендуется. Пожалуйста, добавьте следующий код после

comboBox = новый JComboBox (новый объект [] {"Ester", "Jordi", "Jordina", "Jorge", "Sergi"});

Component[] comps = comboBox.getComponents(); 
for(Component comp : comps){ 
    if(comp instanceof CellRendererPane){ 
     JComboBox co = (JComboBox) ((CellRendererPane)comp).getParent(); 
     co.getEditor().getEditorComponent().addKeyListener(new KeyAdapter()  { 
      @Override 
      public void keyPressed(KeyEvent arg0) { 
       comboBox.showPopup(); 
       comboBox.setPopupVisible(true); 
      } 
     }); 
    } 
} 

Это работает fine.But, лучше использовать декоратор и новые компоненты, также посмотреть в следующую статью,

JComboBox autocomplete

+0

'JComboBox # getEditor # getEditorComponent'? – MadProgrammer