# JButton



## Banana (15. Mrz 2007)

Hallo Zusammen!

Ich habe mir ein kleines Lottospiel programmiert, welches folgendermaßen funktioniert.

Ich habe 6 Textfelder, in dem man seinen Tipp eintippen kann.
Dann muss man auf den JButton klicken, damit der ActionListener aufgerufen wird, welcher dafür sorgt,
die eingetippen Zahlen auszulesen und  anschließend auszugeben. Zudem werden sechs Zufallszahlen erstellt.
Diese Zahlen werden mit den eingegeben Zahlen verglichen und die Anzahl der richtigen Zahlen wird ausgegeben.
Das funktioniert auch alles super, aber nun zu meinem Problem.

Ich hätte gerne, dass wenn man erneut auf den Button drückt, dass das Programm dann vom neuen startet und das spiel von vorne los geht. Nur leider habe ich nichts im Internet oder in Büchern gefunden, die mir erklären wie ich das 
hinbekommen kann.

Zudem funktioniert der Button momentan nur, wenn ich Ihn mit der Maus anklicke, aber ich würde gerne dafür die 
Enter-Taste benutzen können.


Wäre sehr nett wenn mir jemand helfen könnte.

Gruß Banana


----------



## The_S (15. Mrz 2007)

Du musst einfach deine Methoden erneut aufrufen.

Imho ist es reichlich sinnfrei den Button in diesem Fall mit der Enter-Taste zu "verbinden". Da der Button hierzu ohnehin erstmal den Fokus braucht. Ergo kannste ihn dann auch gleich anklicken  .


----------



## Guest (15. Mrz 2007)

Danke, dass hatte ich auch schon probiert, weiß aber nicht genau wie das funktioniert und deswegen hat das nicht geklappt.
Ich kann ja mal meinen Quellcode posten. Wäre sehr nett, wenn du mir dann nochmal helfen könntest
	
	
	
	





```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.HashSet;
import java.util.Random;

//Fensterklasse definieren
public class Oberfläche extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public JButton m_hänsel, m_und, m_gretel;
	public int zahl ;
	public int anzahl= 0;
	public boolean eingefuegt;
	
	public JLabel ttipp1 = null;
	public JLabel ttipp2 = null;
	public JLabel ttipp3 = null;
	public JLabel ttipp4 = null;
	public JLabel ttipp5 = null;
	public JLabel ttipp6 = null;
	
	public JTextField tipp1 = null;
	public JTextField tipp2 = null;
	public JTextField tipp3 = null;
	public JTextField tipp4 = null;
	public JTextField tipp5 = null;
	public JTextField tipp6 = null;

	//Konstruktor
	Oberfläche(String titel){
		super(titel);
		
		//Schaltflächen erzeugen
		m_hänsel = new JButton ("Abschicken");
		
		ttipp1= new JLabel("Tipp 1 : ");
		ttipp2= new JLabel("Tipp 2 : ");
		ttipp3= new JLabel("Tipp 3 : ");
		ttipp4= new JLabel("Tipp 4 : ");
		ttipp5= new JLabel("Tipp 5 : ");
		ttipp6= new JLabel("Tipp 6 : ");
		
		
		tipp1 = new JTextField();
		tipp2 = new JTextField();
		tipp3 = new JTextField();
		tipp4 = new JTextField();
		tipp5 = new JTextField();
		tipp6 = new JTextField();
		
		
		tipp1.setColumns(5);
		tipp2.setColumns(5);
		tipp3.setColumns(5);
		tipp4.setColumns(5);
		tipp5.setColumns(5);
		tipp6.setColumns(5);
		
		
		
		
		JLabel text= new JLabel("Bitte geben Sie ihren Tipp ein: ");
		JLabel leer= new JLabel("");
		JLabel leer2= new JLabel("");
		JLabel leer3= new JLabel("");
		
		
		JLabel richtige= new JLabel("Sie haben " + anzahl+ " treffer");
		
	
		//Layout-Manager zum Anordnen der Schaltflächen
		setLayout(new GridLayout(12,2));
		
		//Schaltflächen in Fenster aufnehmen
		add(text);
		add(leer);
		add(ttipp1);
		add(tipp1);
		add(ttipp2);
		add(tipp2);
		add(ttipp3);
		add(tipp3);
		add(ttipp4);
		add(tipp4);
		add(ttipp5);
		add(tipp5);
		add(ttipp6);
		add(tipp6);
		add(leer2);
		add(m_hänsel);
		
		
//		Anwendung schließen wenn Fenster geschlossen wird
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		this.m_hänsel.addActionListener(new CMeinActionLauscher(this));
	}

		
		// Schaltflächen bei ActionListener registrieren
		//m_und.addActionListener(new CMeinActionLauscher() );
		//m_gretel.addActionListener(new CMeinActionLauscher());*/



	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Automatisch erstellter Methoden-Stub
		
		Oberfläche fenster = new Oberfläche("Swing");
		fenster.pack();
		//fenster.setSize(350,100);
		fenster.setVisible(true);
		
		
		

	}

}
```


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.HashSet;
import java.util.Random;

import javax.swing.JLabel;


public class CMeinActionLauscher implements ActionListener 
{
	
	
	
	private Oberfläche o = null;
	
	public CMeinActionLauscher(Oberfläche o)
	{
		this.o = o;
	}
	
	public void actionPerformed(ActionEvent e) 
	{
		int zahl = 0 ;
		int anzahl= 0;
		boolean eingefuegt;
		int zaehler = 0;
		String wiederholen;
		
		//System.out.println ("Hänsel wurde gedrückt");
		// TODO Automatisch erstellter Methoden-Stub
		this.o.m_hänsel.setText("Nochmal");
		
		
		String one= this.o.tipp1.getText();
		String two= this.o.tipp2.getText();
		String three= this.o.tipp3.getText();
		String four= this.o.tipp4.getText();
		String five= this.o.tipp5.getText();
		String six= this.o.tipp6.getText();
		
		JLabel komplett= new JLabel("Ihr Tipp lautet: ");
		JLabel kompletto= new JLabel(one +" "+ two +" "+ three+" "+ four+" "+ five+" " + six);
		JLabel lotto= new JLabel ("Die Lottozahlen : ");
		
		int one1= Integer.parseInt(one);
		int two2= Integer.parseInt(two);
		int three3= Integer.parseInt(three);
		int four4= Integer.parseInt(four);
		int five5= Integer.parseInt(five);
		int six6= Integer.parseInt(six);
		
		if (one1 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		if (two2 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		if (three3 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		
		if (four4 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		if (five5 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		if (six6 > 49 )
		{
			System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! ");
			System.exit(0);
			
		}
		
		if (one1 == two2)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (one1 == three3)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (one1 == four4)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (one1 == five5)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (one1 == six6)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (two2 == three3)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (two2 == four4)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (two2 == five5)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (two2 == six6)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (three3 == four4)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (three3 == five5)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (three3 == six6)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (four4 == five5)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (four4 == six6)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		
		if (five5 == six6)
		{
			System.out.println("Bitte geben Sie eine Zahl nicht doppelt an!!");
			System.exit(0);
		}
		Random generator = new Random();
		HashSet<Integer> gezogen = new HashSet<Integer>();
		
		
		while (anzahl != 6)
		{	
			zahl = generator.nextInt(50);
			
			if (zahl ==0)
			{
				while(zahl == 0)
					zahl = generator.nextInt(50);
			}
			
			eingefuegt = gezogen.add(zahl);
			
			if(!eingefuegt) // schon vorhanden-> neuer Versuch
				continue;
			
			if (zahl == one1)
				zaehler++;
			
			if (zahl == two2)
				zaehler++;
			
			if (zahl == three3)
				zaehler++;
			
			if (zahl == four4)
				zaehler++;
			
			if (zahl == five5)
				zaehler++;
			
			if (zahl == six6)
				zaehler++;
			
			anzahl++;
		
			
		
		}
				
		JLabel lottozahl= new JLabel (" " + gezogen);	
		JLabel richtige= new JLabel ("Sie haben " + zaehler + " Richtige");		
		
		
		
		this.o.add(komplett);
		this.o.add(kompletto);
		this.o.add(lotto);
		this.o.add(lottozahl);
		this.o.add(richtige);
		
		
		
	}

}
```


----------



## The_S (15. Mrz 2007)

Also wenn ich ehrlich bin, solltest du dich zuerst etwas mehr in OOP und Klassendesign vertiefen. Ansonsten hat das hier nur wenig Sinn :?


----------



## Leroy42 (15. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Also wenn ich ehrlich bin, solltest du dich zuerst etwas mehr in OOP und Klassendesign vertiefen. Ansonsten hat das hier nur wenig Sinn :?



... und sich auch mal mit Arrays beschäftigen.

Aber auf jeden Fall: Hut ab vor soviel Fleiß!


----------



## Guest (15. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Du musst einfach deine Methoden erneut aufrufen.
> 
> Imho ist es reichlich sinnfrei den Button in diesem Fall mit der Enter-Taste zu "verbinden". Da der Button hierzu ohnehin erstmal den Fokus braucht. Ergo kannste ihn dann auch gleich anklicken  .



warum? wenn man mit tab durch die eingabefelder springt kann man doch danach schnell beim button landen und muss dann nicht erst die hand auf die maus legen. sind ja nicht alles nur mausschubser.

leertaste + enter würd ich aber zulassen.


----------



## The_S (15. Mrz 2007)

Um deinen Button mit Enter betätigen zu können musst du die ActionMap anpassen, aber soweit bist du mit deinem jetztigen Kenntnisstand noch lange nicht


----------



## SlaterB (15. Mrz 2007)

```
if (one1 > 49 ) 
      { 
         System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! "); 
         System.exit(0); 
          
      } 
       
      if (two2 > 49 ) 
      { 
         System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! "); 
         System.exit(0); 
          
      } 
       
      if (three3 > 49 ) 
..............
```
->

```
if (one1 > 49 || two2 > 49 || three3 > 49  ||....) {
       System.out.println("Bitte geben Sie eine Zahl zwischen 1-49 an! "); 
         System.exit(0); 

}
```


----------



## Wildcard (15. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Um deinen Button mit Enter betätigen zu können musst du die ActionMap anpassen, aber soweit bist du mit deinem jetztigen Kenntnisstand noch lange nicht


Das ist eine Look and Feel Vorgabe. Das System look and feel verwendet sowohl unter Linux als auch Windows enter für die Buttons. Mac Os bin ich mir nicht sicher.


----------



## The_S (15. Mrz 2007)

Joa, aber manchmal behält man auch gerne ein Look and Feel


----------



## Leroy42 (15. Mrz 2007)

setDefaultButton


----------



## Wildcard (15. Mrz 2007)

Leroy42 hat gesagt.:
			
		

> setDefaultButton


Wobei das bei  Metal L'n'F erst richtig wirr ist. Ein Button reagiert auf Enter und alle anderen auf die Leertaste  :autsch:


----------



## vidi (16. Mrz 2007)

füge deine button einfach einen keylistener hinzu.. der ungefähr so aussieht..


```
public class ButtonKeyListener extends KeyAdapter
{
	public void keyReleased(KeyEvent evt)
    {
		
		if (evt.getKeyCode() == KeyEvent.VK_ENTER)
		{
			
			JButton button = (JButton) evt.getSource();
				
			button.doClick();

		}
		
    }
}
```

bewirkt das wenn du auf deinem button enter drückst, ein click event ausgelöst wird..


----------

