TextListener

Status
Nicht offen für weitere Antworten.

firestone

Bekanntes Mitglied
Hallo Leute



ich brauche mal Hilfe
also ich habe eine Graphische Oberfläche mit zwei Textfeldern und einem Button nun möchte ich gerne einen TextListener einfügen.
Ich würde gerne das wenn jemand in dem einen Feld etwas reinschreibt das dann eine JComboBox eingefügt wird und er hier auch noch was auswählen kann aber nur bei dem einen Textfeld

Geht das irgendwie wenn ja wie müsste der eventuelle Code aussehen ????
Gruß Fireli
 

m@nu

Bekanntes Mitglied
damit da nicht einfach was zusammenhaltloses entsteht: kannst du den code posten, den du bereits hast?
 

firestone

Bekanntes Mitglied
Das is der Code der Klasse wo die Textfelder drin stehen


Code:
package schub.main.gui;

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Klasse f&r das AbfragePanel (DBAbfrage)
 */
public class SchubAbfragePanel extends JPanel{

	// Variablen f& die einzelnen Komponenten
	private JLabel text_id_neu;

	private JLabel text_id_alt;

	private JTextField txt_id_neu;

	private JTextField txt_id_alt;

	private JButton ok_btn;

	// Auswahbox f&r den Typ des Versuchs
	private JComboBox typ_box;

	private ActionListener meinListener;

	private int neue_id;

	private int alte_id;

	private int typ;

	private HashMap<String, Integer> meineDaten;

	/**
	 * Konstruktor
	 * 
	 * @param action
	 *            Action Listener des Hauptprogramms
	 */
	public SchubAbfragePanel(ActionListener action, HashMap data) {
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		meinListener = action;
		meineDaten = data;
		init_labels();
		init_textFelder();
		init_buttons();
		set_layout();
	}

	/**
	 * Methode f& die Labels
	 * 
	 */
	private void init_labels() {
		text_id_neu = new JLabel("Waehlen sie bitte aus nach welcher ID sie suchen wollen:     Nach neuer ID:   ");
		text_id_alt = new JLabel("Nach alter ID:   ");
	}

	/**
	 * Methode f& die Textfelder
	 * 
	 */
	private void init_textFelder() {
		txt_id_neu = new JTextField(10);

		txt_id_alt = new JTextField(10);
	}

	/**
	 * Methode die die Komponeten dem Panel hinzuf&gt
	 * 
	 */
	private void set_layout() {
		this.add(text_id_neu);
		this.add(txt_id_neu);
		this.add(text_id_alt);
		this.add(txt_id_alt);
		this.add(ok_btn);
	}

	/**
	 * Methode f&r die Buttons
	 * 
	 */
	private void init_buttons() {
		ok_btn = new JButton("Abschicken");
		ok_btn.addActionListener(meinListener);
		ok_btn.setActionCommand("ABSCHICKEN");
	}

	private void init_ComboBox() {
		// erzeugt die Auswahlbox TypBox
		typ_box = new JComboBox(new Object[] { "0=mit Buegel mit Vorspannung",
				"1=mit Buegel ohne Vorspannung",
				"2=ohne Buegel mit Vorspannung",
				"3=ohne Buegel ohne Vorspannung" });
	}

	public void get_neue_id() {
		String tmp = txt_id_neu.getText();;
		if(tmp.equals("")){
			neue_id=0;
		}else {
		try{
			neue_id = Integer.parseInt(tmp);
		}catch(NumberFormatException ex){
			JOptionPane.showMessageDialog(this,
			"sie haben keine gültige ID eingegeben bitte versuchen sie es erneut");
		}
		}
		/*
		String tmp = txt_id_neu.getText();
		if(tmp.equals("")){
			neue_id=0;
		}else {
		neue_id = Integer.parseInt(tmp);
		}			
		System.out.println(neue_id);
		*/
		meineDaten.put("neue_id", neue_id);
	}

	private void get_alte_id() {	
		String tmp = txt_id_alt.getText();;
		if(tmp.equals("")){
			alte_id=0;
		}else {
		try{
			alte_id = Integer.parseInt(tmp);
		}catch(NumberFormatException ex){
			JOptionPane.showMessageDialog(this,
			"sie haben keine gültige ID eingegeben bitte versuchen sie es erneut");
		}
		}	
		/*	
		String tmp = txt_id_alt.getText();
		if(tmp == ""){
			alte_id=0;
		}else {
		alte_id = Integer.parseInt(tmp);
		}			
		*/
		meineDaten.put("alte_id", alte_id);
	}

	private void get_typ() {
		typ = typ_box.getSelectedIndex();
	}

	

}

und das ist der code der action performed methode

Code:
public void actionPerformed(ActionEvent ev) {
		String action = ev.getActionCommand();
		if (action.equals("WERTE_EINTRAGEN")) {
			// erzeugt ein Objekt der Klasse einlesen
			typ = typ_box.getSelectedIndex() + 1;
			if (eingabeDatei != null && conn != null) {
				InPut einlesen = new InPut(typ, eingabeDatei, conn);
			} else {
				JOptionPane.showMessageDialog(this,
				"Keine Verbindung zur Datenbank aufgebaut");
			}
	}else if (action.equals("IMPORT")) {
		eingabeDatei = SchubMenuBar.oeffnen(eingabeDatei);
		if (eingabeDatei != null) {
			btn_panel.add(werte_eintr);
			abfr_panel.add(typ_box,BorderLayout.NORTH);
			this.validate();
			this.repaint();
		}
		} else if (action.equals("EXIT")) {
			System.exit(0);
		} else if (action.equals("ABFRAGE")) {
			//dbabfr_panel = new SchubAbfragePanel(this,datenbestand);
			abfr_panel.add(dbabfr_panel);
			this.validate();
			this.repaint();

		} else if (action.equals("CONNECT")) {
			conn = (Connection) Sql.verbindungs_Aufbau(conn);
			
		} else if (action.equals("DISCONNECT")) {
			Sql.verbindung_trennen(conn);
		}
		//Command f&r SchubAbfragePanel
		else if (action.equals("ABSCHICKEN")) {
			dbabfr_panel.get_neue_id();
			//Methode aufrufen zum auslesen der ID nach welcher gesucht werden soll
		}
		
	}
 

m@nu

Bekanntes Mitglied
hmm, ok...
also deine combobox steht zu beginn noch nicht im panel.

um das ganze zu vereinfachen empfehle ich dir, die combobox von anfang an anzuzeigen, aber zu deaktivieren (setEnabled(false);)

beim JTextField musst du keinen TextListener sondern einen DocumentListener verwenden. der könnte wie folgend aussehen:
Code:
    private class IDNeuDocumentListener implements DocumentListener {       
        /**
         * Wird beim entfernen von Text aufgerufen.

         * Wurde der komplette Text gelöscht, wird die ComboBox typ_box
         * deaktiviert.
         * 
         * @param de
         */
        public void removeUpdate(final DocumentEvent de) {
            if((de.getLength() > text_id_neu.getText().length()) && text_id_neu.hasFocus()) {
                typ_box.setEnabled(false);
            }
        }
        
        /**
         * Wird beim einfügen von Text aufgerufen.

         * Hier wird die ComboBox typ_box automatisch aktiviert.
         * 
         * @param de
         */
        public void insertUpdate(final DocumentEvent de) {
            if(!typ_combo.isEnabled()) {
                typ_combo.setEnabled(true);
            }
        }

        public void changedUpdate(final DocumentEvent arg0) {}
    }

jetzt musst du das teil nur noch deiner textbox anfügen:
Code:
text_id_neu.getDocument().addDocumentListener(new IDNeuDocumentListener());

mit der private klasse kommst du klar? die kannst du einfach in deine SchubAbfragePanel-klasse reinkopieren (quasi ne unterklasse)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben