2016-04-07 6 views
0

Dies ist meine erste Frage und ich entschuldige mich wirklich für mein Englisch. Ich will nicht Navigation in JComboBox Dropdown-Liste zeigen das ausgewählte Element in der "JComboBox-Hauptfeld" (Sorry, weiß nicht, wie es heißt, siehe die Bilder). DieseJComboBox Navigation in Dropdown-Liste wählt den Artikel

ist, was passiert, wenn ich in der Liste navigieren:

JComboBox

Aber ich möchte etwas wie folgt aus:

JComboBox

und wenn ich drücken oder auf Einzelteil geklickt eingeben, es erscheinen im Hauptfeld.

ist hier mein Code:

import javax.swing.*; 
import javax.swing.text.JTextComponent; 
import java.awt.*; 

public class ComboTest { 

JFrame frame; 
JPanel panel; 
String[] choices = new String[]{ 
     "Java", 
     "Python", 
     "C++", 
     "PHP", 
     "Perl" 
}; 
JComboBox<String> comboBox = new JComboBox<>(choices); 
JTextComponent textComponent; 

public static void main(String[] args){ 
    new ComboTest(); 
} 

public ComboTest() { 

    frame = new JFrame(); 
    panel = new JPanel(); 
    textComponent = (JTextComponent) comboBox.getEditor().getEditorComponent(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300, 150); 
    frame.setResizable(false); 

    panel.setLayout(new FlowLayout()); 

    comboBox.setEditable(true); 
    comboBox.setSelectedItem(null); 

    panel.add(comboBox); 
    frame.add(panel); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 
} 

Antwort

0

Dank Zilk. Ihre Antwort hat mir geholfen, das zu lösen. Der Listener addPopupMenuListener funktioniert nicht für mich. Aber als ich die addPopupMenuListener zu addItemListener änderte, hat alles gut funktioniert.

comboBox.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(final ItemEvent itemEvent) { 
      comboBox.getEditor().setItem(null); 
      comboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() { 
       @Override 
       public void keyPressed(KeyEvent e) { 
        super.keyPressed(e); 
        if(e.getKeyCode() == KeyEvent.VK_ENTER) 
        { 
         comboBox.getEditor().setItem(itemEvent.getItem()); 
        } 
       } 
      }); 
     } 
    }); 
1

Versuchen Sie, diesen Codeblock

comboBox.addPopupMenuListener(new PopupMenuListener() { 

     @Override 
     public void popupMenuWillBecomeVisible(PopupMenuEvent e) { 
      //when Popupmenu is visible, remove the combobox editor text 
      comboBox.getEditor().setItem(null); 

     } 

     @Override 
     public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { 
     } 

     @Override 
     public void popupMenuCanceled(PopupMenuEvent e) { 
     } 
    });