Buttons/Schaltfläche aktivieren/deaktivieren

MaBiGiga

Grünschnabel
Edit sagt: Schön dass dein Licht schneller ist als meine Finger ;-) Viel Erfolg!


Der
Java:
 if (!tfd1.getText().equals("") && !tfd2.getText().equals(""))
Vergleich macht nichts anderes als die beiden Textfelder tfd1 und tfd2 dahingehend zu überprüfen, ob in ihnen was steht (das war ja deine Anforderung), hier wird auf Ungleichheit mit dem leeren String "" geprüft.
Du kannst die if-Abfrage in jedweder Richtung abändern. Das musst du allerdings schon selbst wissen, auf was und auf was nicht du prüfen magst.

Willst du zum Beispiel nur testen ob in tfd1 ein Wort steht und tfd2 außen vor lassen, nimmst du tfd2 einfach den ItemListener weg, entfernst den && Teil mit tfd2 aus der if Abfrage und es funktioniert mit "einem Wort" in tfd1.

Aber ich denke vom Grundgedanken kannst du dich am Beispielprogramm orientieren.

Bisschen selbst weiterschwimmen musst du schon.
 

sauerpeter

Grünschnabel
Habe mir mit dem SWT-Desginer zu Testzwecke mal schnell nen kleines Formular gebastelt.

An welcher Stelle muss ich das denn jetzt einbauen, da der Button bei mir immer aktiv bleibt :(
 

sauerpeter

Grünschnabel
Also habe jetzt versucht, den Code an verschiedenen Stellen einzufügen (nach Deklaration Button, Nach Dekl. Textfeld, am Ende etc.), aber nichts funktioniert.
Oder brauch ich jetzt extra eine main? Wo das Zeug reinkommt?
 

MaBiGiga

Grünschnabel
Kannst ja mal deinen Code posten, dann kann man dir besser weiterhelfen, sonst hat es was von Glücksspiel, warums nicht funktioniert
 

sauerpeter

Grünschnabel
Hier mal mein Code:
Java:
import java.awt.event.KeyEvent;


public class TestEditor extends EditorPart implements KeyListener{

	public static final String ID = "TestEditor"; //$NON-NLS-1$
	private Text fieldDescription;
	private Text fieldSummary;
    JButton btnSend = new JButton();

	public TestEditor() {
		
	}

	/**
	 * Create contents of the editor part.
	 * @param parent
	 */
	@Override
	public void createPartControl(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		container.setLayout(new GridLayout(3, false));
		
		Label lblSummary = new Label(container, SWT.NONE);
		lblSummary.setText("Summary");
		new Label(container, SWT.NONE);
		new Label(container, SWT.NONE);
		
		fieldSummary = new Text(container, SWT.BORDER);
		fieldSummary.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
		
		Label lblDescription = new Label(container, SWT.NONE);
		lblDescription.setText("Description");
		new Label(container, SWT.NONE);
		new Label(container, SWT.NONE);
		
		fieldDescription = new Text(container, SWT.BORDER);
		GridData gd_text = new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1);
		gd_text.heightHint = 186;
		fieldDescription.setLayoutData(gd_text);
		
		Button btnSave = new Button(container, SWT.NONE);
		btnSave.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		btnSave.setText("Save");
		
		Button btnSend = new Button(container, SWT.NONE);
		btnSend.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		btnSend.setText("Send");
		
		Button btnCancel = new Button(container, SWT.NONE);
		btnCancel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		btnCancel.setText("Cancel");


	fieldDescription.addKeyListener(new KeyListener()
    {

//        @Override
        public void keyTyped(KeyEvent e)
        {
        }

//        @Override
        public void keyReleased(KeyEvent e)
        {
        	JButton btnSend = new JButton();
        	
            if (fieldDescription.getText().equals(""))
            {
            	btnSend.setEnabled(false);
            }
            else
            {
            	btnSend.setEnabled(true);
            }

        }

//        @Override
        public void keyPressed(KeyEvent e)
        {

        }
	
//	@Override
	public void setFocus() {
		// Set the focus
	}

//	@Override
	public void doSave(IProgressMonitor monitor) {
		// Do the Save operation
	}

//	@Override
	public void doSaveAs() {
		// Do the Save As operation
	}

//	@Override
	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException {
		// Initialize the editor part
	}

//	@Override
	public boolean isDirty() {
		return false;
	}

//	@Override
	public boolean isSaveAsAllowed() {
		return false;
	}

});
}
}
Wie gesagt, den Editor habe ich auf die schnelle schnell mal mit SWT-Designer gemacht.
 
Zuletzt bearbeitet von einem Moderator:

MaBiGiga

Grünschnabel
SWT != Swing !

Mein Beispiel Code ist Swing.

Außerdem hast du jetzt Swing (JButton) und SWT (der ganze Rest ;-)) vermischt, was du auch vermeiden solltest.

Was du initial vergessen hast, ist jedoch die Buttons mit setEnabled(false) (das wirds auch in SWT Button geben) deaktiviert zu setzen.
 

sauerpeter

Grünschnabel
Ik raff einfach nicht, wo der Code hinkommt. JEtzt auch mal im allgemeinen: Direkt hinter der Erstellung des Textfeldes oder des Buttons oder am Ende oder eigene main etc...
 

MaBiGiga

Grünschnabel
Eine eigene Main brauchst du dafür nicht. Die Registrierung des Keylisteners für ein Textfeld kannst du direkt nach der Erstellung des Textfeldes vornehmen.
 

I2oxxi

Mitglied
EDIT ::: mein beispiel grad war falsch, srii, ich bastel dir aber eben ein beispiel
EDIT2:: so, beispiele vorhanden, zweite nur mal bisl beschrieben aber sollte reichen denk ich ^^

Bsp 1, Methode die Listener erstellt, ausimplementiert und allen betreffenden objekten hinzufügt
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class MyTextFieldTest extends JFrame {
	
	private JTextField t1,t2;
	private JButton b1;
	
	public MyTextFieldTest()
	{
		init();
		listen();
	}
	
	public void init()
	{
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(5,5,200,200);
		this.setLayout(null);
		t1 = new JTextField();
		t1.setBounds(10,10,100,30);
		t2 = new JTextField();
		t2.setBounds(10,50,100,30);
		b1 = new JButton("senden");
		b1.setBounds(10,90,100,30);
		b1.setEnabled(false);
		this.getContentPane().add(t1);
		this.getContentPane().add(t2);
		this.getContentPane().add(b1);
		this.setVisible(true);
	}
	
	public void listen()
	{
		KeyListener k = new KeyListener(){

			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void keyReleased(KeyEvent e) {
				if(!t1.getText().equals("")&&!t1.equals(""))
				{
					b1.setEnabled(true);
				}
				else
				{
					b1.setEnabled(false);
				}
			}
			
		};
		
		t1.addKeyListener(k);
		t2.addKeyListener(k);
	} 
		
		
	
	
	
	public static void main(String[] args)
	{
		MyTextFieldTest t = new MyTextFieldTest();
	}

}



bsp 2 wäre dann deine klasse selber der Listener:
Java:
MyTextFieldText extends JFrame implements KeyListener
die benötigten Methoden des Interfaces KeyListener implementieren, und dann halt z.B. in init() den Listener hinzufügen
Java:
t1.addKeyListener(this);
t2.addKeyListener(this);

mfg :)
 
Zuletzt bearbeitet:

sauerpeter

Grünschnabel
Code:
public void listen()
    {
		btnCommit = new Button()
		btnCommit.setEnabled(false);
        KeyListener lis = new KeyListener(){
        	
 
            @Override
            public void keyTyped(KeyEvent e) {
                // TODO Auto-generated method stub
                
            }
 
            @Override
            public void keyPressed(KeyEvent e) {
                // TODO Auto-generated method stub
                
            }
 
            @Override
            public void keyReleased(KeyEvent e)
            {
                if (txtDescrip.getText().equals(""))
                {
                	btnCommit.setEnabled(false);
                }
                else
                {
                	btnCommit.setEnabled(true);
                }
 
            }
            
        };
        
        txtDescrip.addKeyListener(lis);
    }

btnCommit = new Button();
Hier zeigt er mir an, das der Konstruktor button undefined ist

txtDescrip.addKeyListener(lis);
Hier meckert er bei addKeyListener, oben ist aber alles nötige importiert. Fehlermeldung heißt: The method addKeyListener(KeyListener) in the type Control is not applicable for the arguments (KeyListener)
Nen Hinweis sagt mir, das ich (org.eclipse.swt.events.KeyListener) vor lis in Klammern setzen soll. Mach ich das, ist die Fehlermeldung weg, aber was bedeutet das? Und vorallem der blaue Punkt jetzt am Rand?