Key-Listener richtig "einbauen"

SteeL1942

Aktives Mitglied
ich habe versucht, mir mit java einen kleinen Taschenrechner zu basteln. das hat auch soweit geklappt. jetzt wollte ich, um das ganze abzurunden, noch ein paar keylistener einbauen, mit denen sich der rechner auch bedienen lässt. allerdings funktioniert das nicht... ich weis nicht, was ich falsch mache. ich hatte das schonmal so gemacht und da lief es wunderbar.
habe auch schon verschiedene varianten ausprobiert, die ich hier über die su-fu gefunden habe, aber es lief keine einzige :(
hier mal der programm-code. der keylistener befindet sich am ende der klasse.
danke schon mal vorweg

Java:
import java.awt.*;
import java.awt.event.*;

class Double_Rechner extends Frame
{
		private Panel zNord = new Panel();
		private Panel zSued = new Panel();
		private Panel zMitte = new Panel();
		private Panel Buttons = new Panel();
		private Panel PZahlen = new Panel();
		private Panel PRechenzeichen = new Panel();
		private TextField Tz1 = new TextField();
		private double z1;
		private int s, r;
		private Color beige=new Color(240,240,180);
		private Button zLoeschen=new Button("Löschen");
		private Button Beenden = new Button("Beenden");
		private Button Zurueck = new Button("Zurück");
		private Button [] Rechenzeichen = {new Button ("C"), new Button ("+"),new Button ("-"), new Button ("*"), new Button ("/"), new Button ("sqrt"), new Button ("x²"), new Button ("x³"),new Button ("x^y"), new Button ("+/-"), new Button("1/x"), new Button ("=")};
		private Button [] Zahlen = {new Button ("1"),new Button ("2"), new Button ("3"), new Button ("4"), new Button ("5"), new Button ("6"), new Button ("7"), new Button("8"), new Button ("9"), new Button("0"), new Button(","), new Button ("(-)")};
		
		private int n = 0;
public Double_Rechner()
		{
			setTitle("Taschenrechner");
			
			zNord.setLayout(new FlowLayout());
			zNord.setBackground(beige);
			zNord.setFont(new Font ("Helvetica", 50,20));
			zNord.add(new Label("Taschenrechner"));
			zMitte.setLayout(new GridLayout(2,1));
			zMitte.setFont(new Font ("Helvetica", 50,20));
			zMitte.setBackground(Color.lightGray);
			zMitte.add(Tz1);
			zMitte.add(Buttons);
			Buttons.setLayout(new GridLayout(1,2));
			Buttons.add(PZahlen);
			Buttons.add(PRechenzeichen);
			PZahlen.setLayout(new GridLayout(4,3));
			PRechenzeichen.setLayout(new GridLayout(4,3));
			do
			{
				PZahlen.add(Zahlen[n]);
				PRechenzeichen.add(Rechenzeichen[n]);
                   Zahlen[n].setFocusable(false);
				Rechenzeichen[n].setFocusable(false);
				n = n+1;
			}while(n<=11);
			zSued.setLayout(new GridLayout(1,3));
			zSued.setBackground(beige);
			zSued.add(zLoeschen);
			zSued.add(Zurueck);
			zSued.add(Beenden);

			addKeyListener(this);
			
			this.setLayout( new BorderLayout(5,5));
			this.add("North",zNord);
			this.add("South", zSued);
			this.add("Center",zMitte);
		
			Zahlen[0].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(1);
					}});
			
			Zahlen[1].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(2);
					}});
			
			Zahlen[2].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(3);
					}});
			
			Zahlen[3].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(4);
					}});
			
			Zahlen[4].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(5);
					}});
			
			Zahlen[5].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(6);
					}});
			
			Zahlen[6].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(7);
					}});
			
			Zahlen[7].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(8);
					}});
			
			Zahlen[8].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(9);
					}});
			
			Zahlen[9].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(0);
					}});
		
		Zahlen[10].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("0.");
					s=1;
				}
				else
				{
					Tz1.setText(Tz1.getText()+".");
				}
				}});
		
		Zahlen[11].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("-");
					s=1;
				}
				}});
		
		Rechenzeichen[0].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				s=0;
				r=0;
				z1=0;
				Tz1.setText("");
				}});
		
		Rechenzeichen[1].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				s=0;
				r=1;
				}});
		
		Rechenzeichen[2].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=2;
				s=0;
				}});
		
		Rechenzeichen[3].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=3;
				s=0;
				}});
		
		Rechenzeichen[4].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=4;
				s=0;
				}});
		
		Rechenzeichen[5].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.sqrt(getZahl(Tz1)));
				s=0;
				}});
		
		Rechenzeichen[6].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.pow(getZahl(Tz1),2));
				s=0;
				}});
		
		Rechenzeichen[7].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.pow(getZahl(Tz1),3));
				s=0;
				}});
		
		Rechenzeichen[8].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=5;
				s=0;
				}});
		
		Rechenzeichen[9].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+(getZahl(Tz1)*-1));
				s=0;
				}});
		
		Rechenzeichen[10].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+(1/getZahl(Tz1)));
				s=0;
				}});
		
		Rechenzeichen[11].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				s=0;
				r=0;
				}});
		
		zLoeschen.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
			   Loeschen();
				}});
		
		Beenden.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            	}});
		
		Zurueck.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                Auswahl a = new Auswahl();
                a.starte();
                a.setSize(300,200);
                a.setLocation(getLocation());
                a.setVisible(true);
                setVisible(false);
            	}});
		
		Tz1.addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e)
            {
        			rechne();
        			z1 = getZahl(Tz1);
        			s=0;
        			r=0;           
            }
            public void keyPressed(KeyEvent keyevent){}
            public void keyReleased(KeyEvent keyevent){}
			});
		
	}
		
	private void rechne()
	{
		switch(r)
		{
		case 0:
		break;
		case 1: Tz1.setText(""+(z1+getZahl(Tz1)));
		break;
		case 2: Tz1.setText(""+(z1-getZahl(Tz1)));
		break;
		case 3: Tz1.setText(""+(z1*getZahl(Tz1)));
		break;
		case 4: Tz1.setText(""+(z1/getZahl(Tz1)));
		break;
		case 5: Tz1.setText(""+(Math.pow(z1,getZahl(Tz1))));
		break;
		}
		z1=0;
	}												
	
	public void Schreibe (int i)
	{
		if(s==0)
		{
			Tz1.setText(""+i);
			s=1;
		}
		else
		{
			Tz1.setText(Tz1.getText()+i);
		}
	}
	
	private void Loeschen()
	{

	}
	
	private double getZahl(TextField s){return Double.valueOf(s.getText()).doubleValue();}	

}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Ich habe es nur kurz überflogen, sehe zwar jede Menge addActionListener(..) aber nirgends addKeyListener(this); kann das sein? :D
 

SteeL1942

Aktives Mitglied
joa das mit den actionlistenern nervt, aber ich brauch ja für jeden button einen...

hab die zeile jetzt mal im Konstruktor eingefügt, aber geändert hat sich nichts. kann so oft enter drücken, wie ich will - er tut nichts :(
 

javimka

Top Contributor
Den KeyListener fügst du ja nur dem Frame hinzu. Aber das Frame hat nicht den Fokus, wenn du auf den Buttons rumklickst und ins Textfeld schreibst. Du müsstest den Listener wohl jeder einzelnen Komponente anhängen, die den Fokus haben könnte.

Vielleicht kannst du es dir etwas einfacher machen, in dem du erreichst, dass die Buttons den Fokus nicht haben können (setFocusable(false)) und dadurch nur das Textfeld den Fokus haben kann. Wenn du dass die Tasten drückst, wird automatisch ins Textfeld geschrieben.
 

noobadix

Bekanntes Mitglied
Java:
...

JTextField demoField = new JTextField(20);
demoField.addKeyListener(new demoKeyListener());

class demoKeyListener implements KeyListener{
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e){}
    public void keyReleased(KeyEvent e){
        String word = demoField.getText();
        if(!word.equals("")) System.out.println(word);
    }
}

...


Soetwas habe ich nach ebenfalls flüchtigem Lesen nicht gefunden. Was sollen denn die KeyListener bewirken?

Gruß N.
 

SteeL1942

Aktives Mitglied
also im prinzip brauche ich für jeden action-listener auch einen key-listener. die action-listener sind ja mit meinen buttons verbunden (also zahlen von 0-9 und rechenzeichen). jetzt möchte, ich dass wenn ich zb eine 0 eingebe, er genau das gleiche macht, als wenn ich im fenster auf den 0-Button drücke.

hab ich das jetzt richtig verstanden, dass ich also den keylistener mit dem textfeld verknüpfen muss??
 

noobadix

Bekanntes Mitglied
Okay, verstehe, aber kann es denn dann nicht zu Missverständnissen kommen? Ich vermute, du hast eine Eingabezeile, wenn du dort die Zahl 0 eingibst, soll ja noch nichts passieren. Also würde ich auf Tastenkombinationen a la "strg+0" setzen. Das geht in nem MenuItem einer MenuBar, schaue nochmal nach wie das genau funktioniert. Diese MenuBar musst du dann glaube ich nicht anzeigen lassen.
 

javimka

Top Contributor
Es wird schwierig, grafisch den Button per Kommande drücken zu lassen. In dem Fall würde ich eher versuchen, den Button komplett selbst zu schreiben und dann eine Methode press() anbieten, die das Drücken grafisch umsetzt. In den Fall müsstest du dem JTextField einen KeyListener anhängen, der auf die Tastenanschläge reagiert. Aber wie gesagt, du tust dir einen grossen Gefallen, wenn das Textfeld die einzige Komponente ist, die den Fokus haben kann.
 

noobadix

Bekanntes Mitglied
Also folgende Idee: Du erzeugst eine MenuBar, die dem HauptJFrame hinzugefügt werden muss. Bei den MenuItems werden dieselben ActionListener registriert wie bei den entsprechenden Buttons. In folgendem Auszug wurde der TastenKombination "Strg + p" und dem Button 'addieren' der AddierenListener zugeschrieben.

Java:
...
class MyMenu extends MenuBar{

    public MyMenu(){

        Menu funktionen = new Menu("Rechenoperationen");

        MenuShortcut plus_sc = new MenuShortcut(KeyEvent.VK_P);
        MenuItem additionsItem = new MenuItem("addieren", plus_sc);
        item.addActionListener(new AddierenListener());

        funktionen.add(plus_sc);

        add(funktionen);
    }
}

//(frame sei eine Referenz auf ein JFrame)
frame.setMenuBar(new MyMenu());

JButton addButton = new JButton("addieren");
addButton.addActionListener(new AddierenListener();

class AddierenListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        //[I]Listener wird sowohl dem MenuItem als auch dem entsprechendem Button hinzugefügt[/I]
   }
}

...

übrigens bekommst du mit "new MenuItem("-")" so einen schicken Unterteilungsstrich in dein Menü ;)
 
Zuletzt bearbeitet:

SteeL1942

Aktives Mitglied
oha. jez überfordert ihr mich aber... verstehe auch nicht, weshalb ich jez ein extra menu anlegen soll.

ich vermute mal, dass ihr mich da jez falsch verstanden habt, deswegen formulier ich das nochmal anders:

ich habe da mehrer knöpfe, die halt etwas machen. jetzt brauche ich keylistener, die dafür sorgen, dass bei drücken einer bestimmten taste das gleiche passiert. heist also nicht, dass durch den tastendruck unbedingt der knopf ausgelöst werden muss.
kann ich nicht die aktionen der knöpfe in je eine methode packen. dann könnte ich die doch im actionlistener vom knopf und im keylistener angeben und hätte das theater mit diesem menu nicht, oder?
 

noobadix

Bekanntes Mitglied
...
ich habe da mehrer knöpfe, die halt etwas machen. jetzt brauche ich keylistener, die dafür sorgen, dass bei drücken einer bestimmten taste das gleiche passiert. heist also nicht, dass durch den tastendruck unbedingt der knopf ausgelöst werden muss.


Ich raff's nicht...kannst du bitte ein konkretes Beispiel geben? Hab das so verstanden, dass wenn du in dein Eingabefeld bsbw. den Wert 23 eingibst, mit einer Tastenkombination beispielsweise das '+'-Zeichen hinzugefügt werden soll.
 

SteeL1942

Aktives Mitglied
also: in dem textfeld stehen nur zahlen, keine rechenzeichen. der rechner läuft vom prinzip her wie der windows-taschenrechner. man kann zahlen eingeben und sobald mal ein rechzeichen anklickt bzw eingibt, wir das rechenzeichen sowie die eingebene zahl intern gespeichert. gibt man nun wieder eine zahl ein, so wird die alte zahl im textfeld überschrieben, da sie ja bei der anwahl des rechenzeichens gespeichert wurde. klickt man jetzt auf den gleich-button, so wird die erste (intern gespeicherte) zahl mit dem angeklickenten rechenzeichen mit der zweiten zahl in dem textfeld verrechnet.

ist irgendwie kompliziert zu erklären :( :(
ich hab den rechner aber mal als ausführbare .jar-datei angehangen. vll ists dann verständlicher

aber es müsste ja auch ganz allgemein und nicht auf mein prog bezogen funktionieren:
man hat ein programm xyz. in dem programm gibt es eine methode die irgendwas macht. diese mehtode soll jetzt einmal von einem knopf ausgeführt also mit actionlistener. und einmal soll die methode abgearbeitet werden, wenn eine bestimmte taste gedrückt wird, also mit keylistener
 

noobadix

Bekanntes Mitglied
Da sehe ich dich widersprechen, einmal sagst du, dass KeyEvent und Button dasselbe tun sollen, dann nicht. Sag mir bitte was bei einem konkreten Tastendruck und was beim Drücken eine konkreten Buttons konkret geschehen soll.
 

SteeL1942

Aktives Mitglied
Wenn ich den Button 1 im programm drücke, schreibt er eine "1" in das textfeld. das gleiche bei den anderen buttons für die zahlen.
jetzt möchte ich noch gerne, dass er auch eine "1" in das textfeld schreibt, wenn ich auf der tastatur die 1 drücke

das geht zwar so schon, indem man vorher einfach mit der maus in das textfeld rein klickt, aber ich hätte das gerne ohne vorherigest klicken in das textfeld, denn beim windows-taschenrechner muss ich ja auch nicht erst in das feld klicken, damit ich die tastatur benutzen kann...
 

SteeL1942

Aktives Mitglied
hab das jetzt mal so gemacht (und den code im ersten post aktualisiert) und es klappt auch,a ber nur bedingt.

da ich den keylistener jetzt an das TextFeld (in meinem Fall Tz1) gehangen hab, funktioniert der keylistener nur, wenn ich vorher mit der maus in das textfeld geklickt habe :( kann ich das irgendwie ändern, damit der keylistener immer funktioniert, denn sobald ich einmal zwischendurch auf einen button geklickt habe, ist das textfeld nicht mehr angewählt und der keylistener macht garnix...
 

javimka

Top Contributor
Setze die Buttons unfokusierbar mit setFocusable(false), dann hast du's.

Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Taschenrechnerchen extends JPanel {

	public Taschenrechnerchen() {
		super(new BorderLayout());
		final JTextArea txf = new JTextArea(3,8);
		
		JButton btn1 = new JButton("1");
		JButton btn2 = new JButton("2");
		JButton btn3 = new JButton("3");
		btn1.setFocusable(false); // Buttons sind nicht mehr fokusierbar
		btn2.setFocusable(false);
		btn3.setFocusable(false);
		
		btn1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txf.append("1");
			}
		});
		btn2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txf.append("2");
			}
		});
		btn3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txf.append("3");
			}
		});
		
		JPanel pnlButtons = new JPanel(new GridLayout(1,3));
		pnlButtons.add(btn1);
		pnlButtons.add(btn2);
		pnlButtons.add(btn3);
		
		add(txf,BorderLayout.CENTER);
		add(pnlButtons,BorderLayout.SOUTH);
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame("Taschenrechnerchen");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.add(new Taschenrechnerchen());
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
}
 

SteeL1942

Aktives Mitglied
hab ich so gemacht. geändert hat sich aber nichts... ich muss nach wie vor erst in das textfeld klicken. bevor der keylistener funktioniert
 

javimka

Top Contributor
Zeig mal deinen Code mit den Änderungen.

Hast du mein Beispiel mal kompiliert? Da sollte es nämlich funktionieren.

//EDIT: Wieso verwendest du eigentlich AWT und nicht Swing? Nicht, dass es an deinem Problem etwas ändern würde, aber er würde dir wahrscheinlich kommende Probleme ersparen.
 
Zuletzt bearbeitet:

SteeL1942

Aktives Mitglied
änderungen hab ich eingefügt. das ist mit in der do-while schleife im konstruktor, die die knöpfe in die panels packt.

warum ich awt benutze?? ganz einfach: ich hab keine ahnugn von swing. bin durch die schule zu java gekommen und ich mach das auch erst seit august. also noch nicht mal ein halbes jahr...
wir haben halt in der schule mit awt angefangen. hätte ich hier im forum nicht rumgeschaut, wüsste ich bis heute nicht, was swing eigendlich ist....
 

javimka

Top Contributor
Das ist seltsam, bei mir funktioniert es nämlich. Kannst du nicht den kompletten Code posten, damit ich ihn bei mir ausführen kann?
 

SteeL1942

Aktives Mitglied
ahhh!!
fehler gefunden. ich hatte nur die buttons in den beiden button-arrays setfocusable(false) gesetzt. ich hab aber den beenden-knopf, der alleine steht, vergessen.... ich poste jez mal das komplett richtige hier neu. und dann hab ich noch ne andere frage: kann ich die ganzen action-listener auch irgendwie in so ein array packen, damit das nicht so viel programm-code ist? das geht ja beim hinzufügen zu den panels auch, aber als ich das dann mit den action-listenern versucht hab, gings in die hose :(

Java:
import java.awt.*;
import java.awt.event.*;

class Double_Rechner extends Frame
{
	public static void main(String args[])
    {
		Double_Rechner d = new Double_Rechner();
    	d.setSize(400,400);
    	d.setVisible(true);
    }
	
	
		private Panel zNord = new Panel();
		private Panel zSued = new Panel();
		private Panel zMitte = new Panel();
		private Panel Buttons = new Panel();
		private Panel PZahlen = new Panel();
		private Panel PRechenzeichen = new Panel();
		private TextField Tz1 = new TextField();
		private double z1;
		private int s, r;
		private Color beige=new Color(240,240,180);
		private Button zLoeschen=new Button("Löschen");
		private Button Beenden = new Button("Beenden");
		private Button Zurueck = new Button("Zurück");
		private Button [] Rechenzeichen = {new Button ("C"), new Button ("+"),new Button ("-"), new Button ("*"), new Button ("/"), new Button ("sqrt"), new Button ("x²"), new Button ("x³"),new Button ("x^y"), new Button ("+/-"), new Button("1/x"), new Button ("=")};
		private Button [] Zahlen = {new Button ("1"),new Button ("2"), new Button ("3"), new Button ("4"), new Button ("5"), new Button ("6"), new Button ("7"), new Button("8"), new Button ("9"), new Button("0"), new Button(","), new Button ("(-)")};
		
		private int n = 0;
public Double_Rechner()
		{
			setTitle("Taschenrechner");
			
			zNord.setLayout(new FlowLayout());
			zNord.setBackground(beige);
			zNord.setFont(new Font ("Helvetica", 50,20));
			zNord.add(new Label("Taschenrechner"));
			zMitte.setLayout(new GridLayout(2,1));
			zMitte.setFont(new Font ("Helvetica", 50,20));
			zMitte.setBackground(Color.lightGray);
			zMitte.add(Tz1);
			zMitte.add(Buttons);
			Buttons.setLayout(new GridLayout(1,2));
			Buttons.add(PZahlen);
			Buttons.add(PRechenzeichen);			
			PZahlen.setLayout(new GridLayout(4,3));
			PRechenzeichen.setLayout(new GridLayout(4,3));
			do
			{
				PZahlen.add(Zahlen[n]);
				PRechenzeichen.add(Rechenzeichen[n]);
				Zahlen[n].setFocusable(false);
				Rechenzeichen[n].setFocusable(false);
				n = n+1;
			}while(n<=11);
			zSued.setLayout(new GridLayout(1,3));
			zSued.setBackground(beige);
			zSued.add(zLoeschen);
			zSued.add(Zurueck);
			zSued.add(Beenden);
			
			Zurueck.setFocusable(false);
			Beenden.setFocusable(false);
			zLoeschen.setFocusable(false);
			
			this.setLayout( new BorderLayout(5,5));
			this.add("North",zNord);
			this.add("South", zSued);
			this.add("Center",zMitte);
		
			Zahlen[0].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(1);
					}});
			
			Zahlen[1].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(2);
					}});
			
			Zahlen[2].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(3);
					}});
			
			Zahlen[3].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(4);
					}});
			
			Zahlen[4].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(5);
					}});
			
			Zahlen[5].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(6);
					}});
			
			Zahlen[6].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(7);
					}});
			
			Zahlen[7].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(8);
					}});
			
			Zahlen[8].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(9);
					}});
			
			Zahlen[9].addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Schreibe(0);
					}});
		
		Zahlen[10].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("0.");
					s=1;
				}
				else
				{
					Tz1.setText(Tz1.getText()+".");
				}
				}});
		
		Zahlen[11].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("-");
					s=1;
				}
				}});
		
		Rechenzeichen[0].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				s=0;
				r=0;
				z1=0;
				Tz1.setText("");
				}});
		
		Rechenzeichen[1].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				s=0;
				r=1;
				}});
		
		Rechenzeichen[2].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=2;
				s=0;
				}});
		
		Rechenzeichen[3].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=3;
				s=0;
				}});
		
		Rechenzeichen[4].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=4;
				s=0;
				}});
		
		Rechenzeichen[5].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.sqrt(getZahl(Tz1)));
				s=0;
				}});
		
		Rechenzeichen[6].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.pow(getZahl(Tz1),2));
				s=0;
				}});
		
		Rechenzeichen[7].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+Math.pow(getZahl(Tz1),3));
				s=0;
				}});
		
		Rechenzeichen[8].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				r=5;
				s=0;
				}});
		
		Rechenzeichen[9].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+(getZahl(Tz1)*-1));
				s=0;
				}});
		
		Rechenzeichen[10].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				Tz1.setText(""+(1/getZahl(Tz1)));
				s=0;
				}});
		
		Rechenzeichen[11].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rechne();
				z1 = getZahl(Tz1);
				s=0;
				r=0;
				}});
		
		zLoeschen.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
			   //ist noch leer
				}});
		
		Beenden.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            	}});
		
		Zurueck.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                //Führt zum Auswahlschirm zurück
            	}});
		
		Tz1.addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e)
            {
        			rechne();
        			z1 = getZahl(Tz1);
        			s=0;
        			r=0;           
            }
            public void keyPressed(KeyEvent keyevent){}
            public void keyReleased(KeyEvent keyevent){}
			});
		
	}
		
	private void rechne()
	{
		switch(r)
		{
		case 0:
		break;
		case 1: Tz1.setText(""+(z1+getZahl(Tz1)));
		break;
		case 2: Tz1.setText(""+(z1-getZahl(Tz1)));
		break;
		case 3: Tz1.setText(""+(z1*getZahl(Tz1)));
		break;
		case 4: Tz1.setText(""+(z1/getZahl(Tz1)));
		break;
		case 5: Tz1.setText(""+(Math.pow(z1,getZahl(Tz1))));
		break;
		}
		z1=0;
	}												
	
	public void Schreibe (int i)
	{
		if(s==0)
		{
			Tz1.setText(""+i);
			s=1;
		}
		else
		{
			Tz1.setText(Tz1.getText()+i);
		}
	}
	
	private double getZahl(TextField s){return Double.valueOf(s.getText()).doubleValue();}	

}
 

javimka

Top Contributor
Java:
for (int i=0;i<10;i++) {
  final int z = (i+1)%9; // kleine Umrechnung, weil der 0-te Button eine 1 schreibt
  zahlen[i].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      schreibe(z);
    }
  });
}

Gemäss Konvention solltest du variabeln und methoden klein schreiben mit sogenanntem CamelCase (neue Wörter mit Grossbuchstaben). Klassennamen sollten keine _ beinhalten, korrekt würde deine Klasse DoubleRechner heissen.
 

SteeL1942

Aktives Mitglied
Java:
for (int i=0;i<10;i++) {
  final int z = (i+1)%9; // kleine Umrechnung, weil der 0-te Button eine 1 schreibt
  zahlen[i].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      schreibe(z);
    }
  });
}

Gemäss Konvention solltest du variabeln und methoden klein schreiben mit sogenanntem CamelCase (neue Wörter mit Grossbuchstaben). Klassennamen sollten keine _ beinhalten, korrekt würde deine Klasse DoubleRechner heissen.

joa dann werd ich das mal ändern. mit dieser for-schleiße fläuft das jetzt. ich musste allerdings
Java:
final int z = (i+1)%10;
anstatt
Java:
final int z = (i+1)%9;
schreiben, damit das läuft. werd nachher mal diese for-schleife googlen, denn das kenne ich auch noch nicht :(
 

Ein Keks

Bekanntes Mitglied
würdest du Swing benutzen könntest du mit
Code:
button.setMnemonic(int keyEvent)
einfach ein Mnemonic (ne kurztaste) für nen JButton setzen (swing ist awt sehr ähnlich der größte unterschied für nen programmierer besteht in dem "J" vor den namen^^ und natürlich in mehr möglichkeiten wie ein eigenes L&F zu setzen). alternativ kannst du auch KeyBindings benutzen dann hast du nicht das Problem mit dem Fokus (Mnemonics benutzen das glaub auch)
aber auch jedenfall solltest du ma
Code:
setEnabled(false)
auf dein TextField aufrufen sonst kann man da ja reinschreiben was man will
 

SteeL1942

Aktives Mitglied
aber auch jedenfall solltest du ma
Code:
setEnabled(false)
auf dein TextField aufrufen sonst kann man da ja reinschreiben was man will

xDDD genau das wollte ich gerade fragen. habe jez die tastenbelegung für die rechenzeichen gemacht und es klappt auch, nur schreibt er mir dann immer die rechenzeichen in das textfeld...
 

SteeL1942

Aktives Mitglied
oha. zu früh gefreut. jez geht der actionlistener nicht mehr :(

gibts nicht einen befehl, der buchstaben und zeichen für das textfeld blockiert, sodass sich nur zahlen rein schreiben lassen?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
mit einem DocumentFilter sollte das gehen:

http://www.java-forum.org/bilder-gu...7213-jtextfield-dokumentarten.html#post587501

anstelle des Patterns, welches da benutzt wird, könntest du einfach "\\d+" nehmen, dann solltest du nur Zahlen eingeben können !

Java:
	JTextField textfield = new JTextField();
	((AbstractDocument) textfield.getDocument())
		.setDocumentFilter(new DocumentSizeFilter(8, "\\d+"));

8 = maximale Anzahl (könntest du auch rauseditieren)
 

SteeL1942

Aktives Mitglied
hmm also das bekomm ich nicht zum laufen. einen DocumentSizeFilter kennt er nicht :( , aber er möchte dann einen Documentfilter importieren. is der gemeint?? wenn ich da so mache, streicht er mir 8, "\\d+" in der klammer an...
 

eRaaaa

Top Contributor
hast du dir den Link angeschaut den ich gepostet habe? Wahrscheinlich nicht :)
Also nochmal komplett:
a)

Java:
	JTextField textfield = new JTextField(8);
	((AbstractDocument) textfield.getDocument())
		.setDocumentFilter(new DocumentDigitFilter("\\d+"));

b)
DocumentSizeFilter gibt es nicht, das ist richtig, den musst du ja auch erstellen, also eine neue Klasse:
(jetzt mal bisschen angepasst)

Java:
import javax.swing.text.*;
import java.awt.*;
import javax.swing.*;
public class DocumentDigitFilter extends DocumentFilter {
    private final String pattern;
    public DocumentDigitFilter(final String pattern) {
        this.pattern = pattern;
    }
    @Override
    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
            throws BadLocationException {
        if (str.matches(pattern)) {
            super.replace(fb, offs, length, str, a);
        }
    }
}

wobei ich jetzt nicht weiß ob du auch die Beschränkung mit der maximalen Anzahl haben wolltest
 

SteeL1942

Aktives Mitglied
den link hatte ich mir angesehn. bin nur nicht schlauer daraus geworden...das mit der beschränkten anzahl brauche ich nicht. besten dank. gibts irgendwo ne erklärung wie dieser digit filter arbeitet bzw was da passiert? das verstehe ich nämlich nicht...

der blockiert jetzt aber auch punkte und vorzeichen :( jez kann ich keine komma-zahlen einbeben bzw ausrechnenlassen. da macht der rechner garnix mehr
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
gibts nicht einen befehl, der buchstaben und zeichen für das textfeld blockiert, sodass sich nur zahlen rein schreiben lassen?

dann hatte ich das wohl falsch verstanden :bae:

ohwei, bin auch nicht der experte in sachen regex, so sollte es jedenfalls tun was du willst denke ich:
(irgendwie aber sau umständlich, geht wahrscheinlich eleganter ;( )

Java:
	JTextField textfield = new JTextField(8);
	((AbstractDocument) textfield.getDocument())
		.setDocumentFilter(new DocumentDigitFilter("-?\\d+\\.?\\d+"));

und die klasse sieht nun wie folgt aus:
Java:
class DocumentDigitFilter extends DocumentFilter {
    private final String pattern;

    public DocumentDigitFilter(final String pattern) {
	this.pattern = pattern;
    }

    @Override
    public void replace(FilterBypass fb, int offs, int length, String str,
	    AttributeSet a) throws BadLocationException {
	int fullLength = fb.getDocument().getLength();

	if (str.matches("-")) {
	    if (fullLength == 0) {
		super.replace(fb, offs, length, str, a);
	    }
	} else if (str.matches("\\.")) {
	    if (!fb.getDocument().getText(0, fullLength).contains(".")) {
		super.replace(fb, offs, length, str, a);
	    }
	} else if (str.matches("\\d")) {
	    super.replace(fb, offs, length, str, a);
	} else if (str.matches(pattern)) {
	    super.replace(fb, offs, length, str, a);
	}

    }
}
 

SteeL1942

Aktives Mitglied
also so ganz läufts immernoch nicht...

erstmal hat eclipse rumgemeckert und mir einiges in der klasse rot angestrichen. der hat dann so verbesserungsvorschläge gemacht, die hab ich dann eingefügt, so:

Java:
class DocumentDigitFilter extends DocumentFilter {
    private final String pattern;
 
    public DocumentDigitFilter(final String pattern) {
    this.pattern = pattern;
    }
 
    public void replace(FilterBypass fb, int offs, int length, String str,
        javax.swing.text.AttributeSet a) throws BadLocationException {
    int fullLength = fb.getDocument().getLength();
 
    if (str.matches("-")) {
        if (fullLength == 0) {
        super.replace(fb, offs, length, str, a);
        }
    } else if (str.matches("\\.")) {
        if (!fb.getDocument().getText(0, fullLength).contains(".")) {
        super.replace(fb, offs, length, str, a);
        }
    } else if (str.matches("\\d")) {
        super.replace(fb, offs, length, str, a);
    } else if (str.matches(pattern)) {
        super.replace(fb, offs, length, str, a);
    }
 
    }
}

das gleichheitszeichen funktioniert jetzt. er schreibt auch das ergbnis mit . oder mit - da rein, aber der clear-knopf macht jez nix mehr :( echt zum mäuse melken
 

eRaaaa

Top Contributor
in deinem Listener für den Button "C" müsstest du jetzt anstatt
Java:
                Tz1.setText("");

z.B.
Java:
		try {
		    Tz1.getDocument().remove(0, Tz1.getText().length());
		} catch (BadLocationException e1) {
		    e1.printStackTrace();
		}

aufrufen.
 

SteeL1942

Aktives Mitglied
jawoll das läuft. jez muss ich nur nochmal mit zwei anderen kleinigkeiten nerven:

einmal der .-button (intern der Zahlen[10] button). der tuts auch nicht mehr... und dann der (-) button (intern der Zahlen[11] button), mit dem man das minus als vorzeichen eingeben kann. der funktioniert zwar noch, aber sobald ich den einmal benutzt hab, kann ich keine zahlen mehr eingeben....
 

SteeL1942

Aktives Mitglied
kein thema:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

class Double_Rechner extends JFrame
{
	public static void main(String args[])
    {
		Double_Rechner d = new Double_Rechner();
    	d.setSize(400,400);
    	d.setVisible(true);
    }
		
		private Panel zNord = new Panel();
		private Panel zSued = new Panel();
		private Panel zMitte = new Panel();
		private Panel Buttons = new Panel();
		private Panel PZahlen = new Panel();
		private Panel PRechenzeichen = new Panel();
		private JTextField Tz1 = new JTextField(8);
		private double z1;
		private int s, r;
		private Color beige=new Color(240,240,180);
		private Button Beenden = new Button("Beenden");
		private Button Zurueck = new Button("Zurück");
		private JButton [] Rechenzeichen = {new JButton ("C"), new JButton ("+"),new JButton ("-"), new JButton ("*"), new JButton ("/"), new JButton ("sqrt"), new JButton ("x²"), new JButton ("x³"),new JButton ("x^y"), new JButton ("+/-"), new JButton("1/x"), new JButton ("=")};
		private JButton [] Zahlen = {new JButton ("1"),new JButton ("2"), new JButton ("3"), new JButton ("4"), new JButton ("5"), new JButton ("6"), new JButton ("7"), new JButton("8"), new JButton ("9"), new JButton("0"), new JButton(","), new JButton ("(-)")};
		
		private int n = 0;
public Double_Rechner()
		{
			setTitle("Taschenrechner");
			zNord.setLayout(new FlowLayout());
			zNord.setBackground(beige);
			zNord.setFont(new Font ("Helvetica", 50,20));
			zNord.add(new Label ("Taschenrechner"));
			zMitte.setLayout(new GridLayout(2,1));
			zMitte.setFont(new Font ("Helvetica", 50,20));
			zMitte.setBackground(Color.lightGray);
			zMitte.add(Tz1);
			zMitte.add(Buttons);
			Buttons.setLayout(new GridLayout(1,2));
			Buttons.add(PZahlen);
			Buttons.add(PRechenzeichen);			
			PZahlen.setLayout(new GridLayout(4,3));
			PRechenzeichen.setLayout(new GridLayout(4,3));
			do
			{
				PZahlen.add(Zahlen[n]);
				PRechenzeichen.add(Rechenzeichen[n]);
				Zahlen[n].setFocusable(false);
				Rechenzeichen[n].setFocusable(false);
				n = n+1;
			}while(n<=11);
			zSued.setLayout(new GridLayout(1,3));
			zSued.setBackground(beige);
			zSued.add(Zurueck);
			zSued.add(Beenden);	    
			
			Zurueck.setFocusable(false);
			Beenden.setFocusable(false);

			((AbstractDocument) Tz1.getDocument()).setDocumentFilter(new DocumentDigitFilter("-?\\d+\\.?\\d+"));
			
			this.setLayout( new BorderLayout(5,5));
			this.add("North",zNord);
			this.add("South", zSued);
			this.add("Center",zMitte);
			
			for (int i=0;i<10;i++) {
				  final int z = (i+1)%10; // kleine Umrechnung, weil der 0-te Button eine 1 schreibt
				  Zahlen[i].addActionListener(new ActionListener() {
				    public void actionPerformed(ActionEvent e) {
				      Schreibe(z);
				    }
				  });
				}
			
		
		Zahlen[10].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("0.");
					s=1;
				}
				else
				{
					Tz1.setText(Tz1.getText()+".");
				}
				}});
		
		Zahlen[11].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(s==0)
				{
					Tz1.setText("-");
					s=1;
				}
				}});
		
		Rechenzeichen[0].addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				s=0;
				r=0;
				z1=0;
				try {
		            Tz1.getDocument().remove(0, Tz1.getText().length());
		        } catch (BadLocationException e1) {
		            e1.printStackTrace();
		        }
				}});
		
		for (int i=1;i<12;i++) {
			  final int z = i%12;
			  Rechenzeichen[i].addActionListener(new ActionListener() {
			    public void actionPerformed(ActionEvent e) {
			    	rechne(r,z);
			    	if(z<=4)
			    	{
			    		r=z;
			    	}
			    	else
			    	{
			    		r=0;
			    	}
			    	if(z==8)
			    	{
			    		r=5;
			    	}
			    }
			  });
			}
		
		Beenden.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                setVisible(false);
                dispose();         
                System.exit(0);
            	}});
		
		Zurueck.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
               //leitet zurück
            	}});
		
		Tz1.addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e){}
            public void keyPressed(KeyEvent keyevent){}
            public void keyReleased(KeyEvent e)
            {
            	if(e.getKeyCode()==KeyEvent.VK_ENTER)
                {
            		rechne(r,1);
    				s=0;
    				r=0;
                } 
            }
			});
		
	}
		
	private void rechne(int i, int z)
	{
		switch(i)
		{
		case 0:
		break;
		case 1: Tz1.setText(""+(z1+getZahl(Tz1)));
		break;
		case 2: Tz1.setText(""+(z1-getZahl(Tz1)));
		break;
		case 3: Tz1.setText(""+(z1*getZahl(Tz1)));
		break;
		case 4: Tz1.setText(""+(z1/getZahl(Tz1)));
		break;
		case 5: Tz1.setText(""+(Math.pow(z1,getZahl(Tz1))));
		break;
		}
		s=0;
		switch(z)
		{
		case 0:
		break;
		case 1:
		case 2:
		case 3:
		case 4: z1 = getZahl(Tz1);
		break;
		case 5: Tz1.setText(""+Math.sqrt(getZahl(Tz1)));
		break;
		case 6: Tz1.setText(""+Math.pow(getZahl(Tz1),2));
		break;
		case 7: Tz1.setText(""+Math.pow(getZahl(Tz1),3));
		break;
		case 8: z1 = getZahl(Tz1);
		break;
		case 9: Tz1.setText(""+(getZahl(Tz1)*-1));
		break;
		case 10: Tz1.setText(""+(1/getZahl(Tz1)));
		break;
		case 11: z1 = getZahl(Tz1);
		break;
		}
	}												
	
	public void Schreibe (int i)
	{
		if(s==0)
		{
			Tz1.setText(""+i);
			s=1;
		}
		else
		{
			Tz1.setText(Tz1.getText()+i);
		}
	}
	
	private double getZahl(JTextField s){return Double.valueOf(s.getText()).doubleValue();}	

}
 

javimka

Top Contributor
Der . funktioniert nicht mehr, weil der Regex-Ausdruck false ergibt und z.B. "-3." nicht akzeptiert.
Ich würde als Regex String folgendes verwenden: "-?\\d*\\.?\\d*"
 

SteeL1942

Aktives Mitglied
gibt es irgendwo ne erklärung, wie man so einen filter benutzt bzw schreibt? ist echt super, dass es jetzt so läuft, aber ich fänds scho nicht schlecht, wenn ich das nächste mal zumindest ansatzweise in der lage wäre, mir sowas selbst zu basteln... ich schnalls halt nur nich, was je in dieser DocumentDigitFilter klasse passiert.
 

eRaaaa

Top Contributor
Mhm, um das ganz zu verstehen muss man vllt ein wenig ausholen. JTextField erbt von JTextComponent, welches ein Model (Document) besitzt, welches halt für den Inhalt verantwortlich ist.
Sprich, wenn du auf deinem Textfeld z.B. die setText() -Methode aufrufst, holt sich die Oberklasse mit getDocument das Model und ändert dieses "einfach".
Java:
    public void setText(String t) {
        try {
            Document doc = getDocument();
            if (doc instanceof AbstractDocument) {
                ((AbstractDocument)doc).replace(0, doc.getLength(), t,null);
            }
            else {
                doc.remove(0, doc.getLength());
                doc.insertString(0, t, null);
            }
        } catch (BadLocationException e) {
	    UIManager.getLookAndFeel().provideErrorFeedback(JTextComponent.this);
        }
    }

Wenn du jetzt allerdings nicht willst, dass sämtliche Eingaben(Strings) erlaubt sind, musst du halt diesen Mechanismus irgendwie ändern. Man könnte z.B. auch eine eigene Document-Klasse erstellen, wo du dann die hier aufgeführten Methoden wie insertString etc. überschreibst, oder aber so wie wir das getan haben, dem Document einen eigenen Filter hinzuzufügen. Der halt nicht einfach den String einfügt, sondern einige Regeln ( wie z.B. dass nur Zahlen erlaubt sind) beachtet.

schau doch evtl. auch mal hier rein (Meine Erklärung ist vllt auch nicht die Beste ;) ):
Text Component Features (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) (Implementing a Document Filter)
 

javimka

Top Contributor
Die wichtigsten Zeichen, die du jetzt im String hast:
x? = x kommt entweder einmal vor oder nicht
x+ = x kommt mindestens einmal oder beliebig oft vor
x* = x kommt nie oder beliebig oft vor
\d = eine Dezimalzahl
\. = ein Punkt

Java Regular Expressions
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
D String value change listener Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Problem mit Listener Java Basics - Anfänger-Themen 0
P Listener registrieren Java Basics - Anfänger-Themen 40
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
M Compiler-Fehler Using action listener Java Basics - Anfänger-Themen 1
F Listener schreiben Java Basics - Anfänger-Themen 1
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
J Listener Java Basics - Anfänger-Themen 4
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
llabusch Kombinationsfeld - LISTENER Java Basics - Anfänger-Themen 0
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
K On Click listener Problem Java Basics - Anfänger-Themen 4
L JTextField/Listener Input Problem Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
G Listener ohne Objekt Java Basics - Anfänger-Themen 5
T Button Text mit Action Listener [Hilfe!] Java Basics - Anfänger-Themen 10
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
K Key Listener bei 2 gleichzeitig gedrückten tasten Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
K Erste Schritte table Listener noob frage Java Basics - Anfänger-Themen 3
E eigenständige Listener-Klasse Java Basics - Anfänger-Themen 9
T Motion listener Java Basics - Anfänger-Themen 10
U Listener erstellen Java Basics - Anfänger-Themen 16
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12
M listener Java Basics - Anfänger-Themen 16
L Listener Problem in Klasse Java Basics - Anfänger-Themen 8
P Listener für mehrere Buttons Java Basics - Anfänger-Themen 3
L Window Listener Java Basics - Anfänger-Themen 2
Kenan89 JTable: Listener Java Basics - Anfänger-Themen 4
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
A action listener Java Basics - Anfänger-Themen 8
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
E Mehrere Listener auf einen Button? Java Basics - Anfänger-Themen 3
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
X Problem bezüglich Key Listener Java Basics - Anfänger-Themen 3
Y Button hört nicht auf Listener Java Basics - Anfänger-Themen 5
H JTable, Listener und CellEditor Java Basics - Anfänger-Themen 8
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
M Listener Objekte Java Basics - Anfänger-Themen 12
S Applet Key Listener Java Basics - Anfänger-Themen 6
J Action Listener Java Basics - Anfänger-Themen 2
G Probleme mit Listener Java Basics - Anfänger-Themen 27
B Wert einer Variable mit Listener ueberwachen Java Basics - Anfänger-Themen 3
F Port Listener Java Basics - Anfänger-Themen 9
J JComboBox Listener Java Basics - Anfänger-Themen 6
J Window-Listener funktionieren nicht Java Basics - Anfänger-Themen 7
N Frage zu Listener für Textfelder Java Basics - Anfänger-Themen 5
Benji0815 Eigenen Listener schreiben Java Basics - Anfänger-Themen 13
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
S Listener von ausserhalb aufrufen Java Basics - Anfänger-Themen 2
S Action Listener Java Basics - Anfänger-Themen 6
Sweety Listener in Swing Java Basics - Anfänger-Themen 8
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
Developer_X Mouse MOTION listener example Java Basics - Anfänger-Themen 5
J Mouse-Listener Java Basics - Anfänger-Themen 3
I Listener Klassen in Package Java Basics - Anfänger-Themen 3
StickToFreak Applet -> GameLoop + Listener / Listener funktioniert nicht Java Basics - Anfänger-Themen 22
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
D dialog listener? Java Basics - Anfänger-Themen 2
G Key Listener arbeitet Fehlerhaft Java Basics - Anfänger-Themen 6
C Listener und Events Java Basics - Anfänger-Themen 10
E Listener Java Basics - Anfänger-Themen 2
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
S Action Listener Funktioniert nicht Java Basics - Anfänger-Themen 6
D Kombinationsfeld => Realisierung im Listener? Java Basics - Anfänger-Themen 2
G LIstener bei JavaMail Java Basics - Anfänger-Themen 2
G Context Listener des Apache Tomcat verwenden Java Basics - Anfänger-Themen 4
D Listener bzw. Interfaces Java Basics - Anfänger-Themen 7
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
G Window Listener? Java Basics - Anfänger-Themen 2
G 2 Listener wiedersprechen sich. Java Basics - Anfänger-Themen 12
G Listener für JPanel für Statusmeldungen Java Basics - Anfänger-Themen 3
F Listener für Variable Java Basics - Anfänger-Themen 29
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
N Listener für datei Java Basics - Anfänger-Themen 13
S Mit Listener AWT Objekte ansprechen Java Basics - Anfänger-Themen 2
G listener für radiobutton Java Basics - Anfänger-Themen 1
G Listener Java Basics - Anfänger-Themen 5
G Listener Problem Java Basics - Anfänger-Themen 3
B Wiso funktioniet das nicht? (Listener) Java Basics - Anfänger-Themen 6
H Key Listener macht nicht das was er soll Java Basics - Anfänger-Themen 4
T Wartet Klasse auf Listener? Java Basics - Anfänger-Themen 3
D Listener? Java Basics - Anfänger-Themen 2
S Listener auf JTextfeld Java Basics - Anfänger-Themen 8
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben