JComboBox

Serethos

Erfahrenes Mitglied
Servus

Mein problem ist.
Frag mich warum ne JComboBox, kein KeyEvent hat wie ein JTextField.
Hat jemand ne Ahnung wie man sonst feststellen kann wenn jemand in dem Feld was eintippen will.
 
Hi,
gemäß API kann der ComboBox ein Editor hinterlegt werden, z.B. ein BasicComboBoxEditor. Dieser ist per default ein JTextField. Und einem JTextField kann man ein Document zuweisen --> gewonnen!
Denn in der Document-Interface-Methode insertString(...) kann ja abgefangen werden, ob ein String eingefügt wird oder nicht.
 
Servus

danke für denn Link aber Irgendwie seh ich da nicht durch.
Mein Problem ist hab keine Ahnung wie ich "API kann der ComboBox ein Editor hinterlegt werden, z.B. ein BasicComboBoxEditor. Dieser ist per default ein JTextField"

das Anstellen soll?

weil wenn ich ja ne JComboBox dann JTextField bekomme gehen doch die KeyEvent Methoden wieder.

Was ich aber nicht verstehe denn In der Api steht drin das es für jede Componente ein KeyListener gib aber wieso reagiert der nicht wenn ich was in die JComboBox Eintippen will?
 
Hi,
ähm tja was soll ich sagen...bei mir klappts nicht. ;)
Sobald ich im Editor das Document zuweise, wird in der unaufgeklappten Combobox-Zeile nichts angezeigt. Bestimmt habe ich da wieder eine Kleinigkeit vergessen...Thomas, schnuffie, Idee?

Code:
package comboTest;

import java.awt.BorderLayout;
import java.awt.HeadlessException;

import javax.swing.*;

/**
 * @author Snape
 */
public class ComboKeyListener extends JFrame
{
  JComboBox cboTest = new JComboBox();

  public ComboKeyListener()
  {
    super();
  }
  /**
   * @param frameTitle
   * @throws java.awt.HeadlessException
   */
  public ComboKeyListener( String frameTitle ) throws HeadlessException
  {
    super( frameTitle );
    setSize(400, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(cboTest, BorderLayout.NORTH);
    cboTest.addItem("Hund");
    cboTest.addItem("Katze");
    cboTest.addItem("Maus");
    cboTest.setEditable(true);
    cboTest.setEditor(new ComboEditor(cboTest.getSelectedItem().toString()));
  }
  public static void main( String[] args )
  {
    ComboKeyListener comboKeyListener = new ComboKeyListener("Test");
    comboKeyListener.show();
  }
}

Code:
package comboTest;

import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ComboBoxEditor;
import javax.swing.JTextField;

/**
 * @author Snape
 */
public class ComboEditor extends JTextField implements ComboBoxEditor
{
  public ComboEditor( String defaultValue )
  {
    setText( defaultValue );
//    setDocument( new InputDocument() );
    addKeyListener(new KeyListener(){
      
      public void keyReleased(KeyEvent ke)
      {
        System.out.println("Gedrückter Tastencode ist: " + ke.getKeyChar());
      }
	    public void keyPressed( KeyEvent arg0 )
	    {}
	    public void keyTyped( KeyEvent arg0 )
	    {}
    });
  }

  public void setItem( Object anObject )
  {
    if ( anObject != null )
      setText( anObject.toString() );
  }

  public Component getEditorComponent()
  {
    return this;
  }

  public Object getItem()
  {
    return getText();
  }
}

Code:
package comboTest;

import java.awt.Toolkit;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class InputDocument extends PlainDocument
{
	public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
	{
    try
    {
      Integer.parseInt(s);
    }
    catch(Exception ex)   //only allow integer values
    {
      Toolkit.getDefaultToolkit().beep(); //macht ein DÜT
      //System.out.println("Keine Zahl!");
      return ;
    }
    super.insertString(offset,s, attributeSet);
	}
}
 
Snape hat gesagt.:
Hi,
ähm tja was soll ich sagen...bei mir klappts nicht. ;)
Sobald ich im Editor das Document zuweise, wird in der unaufgeklappten Combobox-Zeile nichts angezeigt. Bestimmt habe ich da wieder eine Kleinigkeit vergessen...Thomas, schnuffie, Idee?

Hab schon...

Code:
public class InputDocument extends PlainDocument
{
	public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
	{
    try
    {
      Integer.parseInt(s);
    }
    catch(Exception ex)   //only allow integer values
    {
      Toolkit.getDefaultToolkit().beep(); //macht ein DÜT
      //System.out.println("Keine Zahl!");
      return ;
    }
    super.insertString(offset,s, attributeSet);
	}
}

Da ich ja mit Hund/Katze/Maus Strings reinschreibe, fliegt jedes mal eine Exception und angezeigt wird nichts...
 

Neue Beiträge

Zurück