ActionListener + GUI

newbie2009

Bekanntes Mitglied
Hey leute ich habe da ein Problem mit dem ActionListener , ich habe den überschrieben , und wollte eigentlich, dass beim Auslösen eines Buttons in alle Felde(9x9 Matrix) halt eine 0 geschrieben wird.
Die Methode an sich funktioniert nur , dass mit dem ActionListener zu verbinden bereitet mir schwierigkeiten, da ich in der Methode Parameter nutze und diese eigentlich in der main methode stehen sollen.
Nun weiß ich nicht wie ich das mit dem ActionListener umsetze .


Vielen Dank im Voraus



Java:
class Mylistener implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent arg0,) {
		
		Sudokufenster.felderbelegen();
	}
	
	
	
}


public class Sudokufenster extends JPanel{


static void felderbelegen(Sudokufenster[]neu,int [][] zahlen){
	
	for(int i=0;i<zahlen.length;i++){
		for(int z=0;z<zahlen[i].length;z++){
			
				neu[i].feld1[z].setText(String.valueOf(zahlen[i][z]));
			
				             
			
			
		}
		
	}
	
	
}
}
 

nrg

Top Contributor
welche felderbelegen methode meinst du in dem listener aufzurufen? also bestimmt nicht die, die du gepostet hast, weil die eine andere signatur hat.
 

newbie2009

Bekanntes Mitglied
ja eben , die hat eine andere signatur, weil ich nicht weiß , was für parameter ich da einsetzen soll,
das macht mir ja schwierigkeiten .
es soll aufjedenfall die implementierte methode aufgerufen werden, mit parametern "aus der späteren main-methode".
 

nrg

Top Contributor
post mal den ganzen Code. will gleich schlafen gehn. das würd ich mir kurz noch ankucken aber auf rätseln hab ich jetz net so lust :)
 

Lowpass

Aktives Mitglied
Mir scheint, Du hast bei Deinem Code ein allgemeines Design-Problem und ich bin mir nicht sicher, ob ich es richtig verstehe.

feldbelegen erwartet zuerst einen Array vom Typ "Sudokufenster".
"Sudokufenster" leitet von JPanel ab und muss wohl 9 Member vom Typ int[] haben, von denen Du im abgedruckten Beispiel derjenige mit Name "feld1" ansprichst.
Das heisst, ein komplettes "Sudoku-Spielbrett" besteht dann aus insgesamt 9 Objekten vom Typ "Sudokufenster", die alle von JPanel ableiten?

Wäre es nicht naheliegender, dass "Sudokufenster" ein Attribut vom Typ int[][] bzw. String[][] besitzt?
Zudem: wieso static? Gehört denn die Methode nicht direkt zum Typ "Sudokufenster" und sollte auch entsprechend auf sich selbst angewendet werden?

Dann würde die Methode noch so aussehen:
Java:
public class Sudokufenster extends JPanel{

    String[][] felder;

    void felderbelegen(int[][] zahlen){
        felder = new String[zahlen.length][zahlen[0].length];
        for(int i=0; i<zahlen.length; i++){
            for(int z=0; z<zahlen[i].length; z++){
                felder[i][z].setText(String.valueOf(zahlen[i][z]));
            }
        }
        
    }
}

Um das Feld komplett mit '0' zu füllen, würde ich dann allerdings eine eigene Methode schreiben. Sowas wie:

Java:
void reset() {
    for (int i = 0; i < felder.length; i++) {
        for (int j = 0; j < felder[i].length; j++) {
            felder[i][j] = "0";
        }
    }
}

Und die kannst Du dann von Deinem ActionListener aus einfach aufrufen.
Natürlich könntest Du im ActionListener auch einen int-array in der Grösse 9x9 erstellen, ihn komplett mit Nullen füllen und an feldbelegen übergeben.

Um die Methode aufrufen zu können, kannst Du Deinem Listener einen Konstruktor hinzufügen, der eine Instanz von Sudokufenster entgegen nimmt und diese speichert - oder Du machst daraus eine Inner Class von Sudokufenster und hast damit direkten Zugriff auf alle Instanz-variablen und -methoden.
 

newbie2009

Bekanntes Mitglied
danke schon mal für die hilfen , der letzte beitrag greift mein problem weitgehend auf , ich poste hier nochmal meinen ganzen quellcode , vll versteht man das problem besser.
es geht mir halt darum , dass es sowas wie eine "maske " sein soll, weil ich noch nebenbei eine andere klasse Sudoku implementiere und die dann mit dieser maske zusammenfügen möchte.

Java:
import java.awt.*;
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.JTextField;






public class Sudokufenster extends JPanel{
	
JFrame window = new JFrame("sudkowindow vs.ru	s");

	
public Sudokufenster(){
	
	
	super(new GridLayout(3, 3, 3, 3));
	
	for(int i =0;i<9;i++){
	feld1 [i] = new TextField(1);
	JTextField text= new JTextField();	
	add(feld1[i]);}

	
}




 TextField[] feld1 = new TextField[9];


 
 
 
static void felderbelegen(Sudokufenster[]neu,int [][] zahlen){
	
	for(int i=0;i<zahlen.length;i++){
		for(int z=0;z<zahlen[i].length;z++){
			
				neu[i].feld1[z].setText(String.valueOf(zahlen[i][z]));
			
				             
			
			
		}
		
	}
	
	
}




	





	
	
	public static void main (String[]args){


		int[][]felder = new int[9][9];
		felder[0][0]=1;
		felder[0][1]=1;
		felder[0][2]=1;

		//Komponenten		
		TextField[] feld2 = new TextField[9];
		TextField feldchen = new TextField("leeres feld");
		Sudokufenster[]sud= new Sudokufenster[9];
		
		
        
        JTextField textfield= new JTextField("Hallo Welt!", 20);
        JButton fill = new JButton("werte auf 0 setzen ");
        JButton loesen = new JButton ("sudoku felder lösen");
        
        
        
        
        JFrame frame = new JFrame("sudokufield");
        
        fill.addActionListener(new Mylistener());
        
        
        
        for(int i=0;i<sud.length;i++){
    		sud[i]	= new Sudokufenster();
    		frame.add(sud[i]);
    		}
        
        
        felderbelegen(sud,felder);
        
       
        int []neu = new int[1];
        neu[0]=3;
        
        for(int i=0;i<neu.length;i++){
        	feldchen.setText(String.valueOf(neu[i]));
        	}
        
        
        
        
        frame.add(fill);frame.add(loesen);frame.add(feldchen);
        
        
        frame.setLayout(new GridLayout(4, 3, 2, 2));
        frame.setVisible(true);
     

		
		
	}
}




class Mylistener implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		Sudokufenster.felderbelegen(null,null);
	}
	
	
	


	
}
 

Lowpass

Aktives Mitglied
Also zuallererst solltest Du die Darstellung Deines Quelltextes überarbeiten. Mit diesen Dutzenden von Leerzeichen ist das ja völlig unübersichtlich.
Auch sowas geht gar nicht:

Java:
    for(int i =0;i<9;i++){
    feld1 [i] = new TextField(1);
    JTextField text= new JTextField();  
    add(feld1[i]);}

Das sollte in etwa (je nach Stil natürlich unterschiedlich) so aussehen:

Java:
    for (int i =0; i<9; i++) {
        feld1 [i] = new TextField(1);
        JTextField text= new JTextField();  
        add(feld1[i]);
    }
Dann erkennt man auch sofort, dass Du hier 9 JTextField namens "text" erzeugst, die nach der Schleife nicht mehr erreichbar sind und somit vom Garbage Collector wieder eingesammelt werden.

Und dann scheint mir, musst Du erstmal nochmals etwas über die Bücher und über Objektorientierte Programmierung lesen. Alles statisch zu machen ist sicher nicht der richtige Weg und führt entweder zu einem Murks oder in eine Sackgasse.

Ich empfehle Dir, die main-Methode mehr oder weniger auf etwa folgendes zu reduzieren:
Java:
public static void main(String args[]) {
    JFrame frame = new JFrame("sudokufield");
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add("Center", new Sudokufenster());
    frame.setVisible(true);
}
Dann kannst Du nämlich fast nicht mehr anders, als das ganze objektorientiert zu machen.
Wieso eine statische Methode machen, die Du sowieso nur für Instanzen von Sudokufenster nutzt? Wieso machst Du daraus nicht eine Instanz-Methode?

Aber zuallererst: erstmal Deinen Quelltext formatieren. So kann man den ja nicht lesen.
Auch mehrere Anweisungen auf 1 Zeile würde ich nicht machen.
 
Zuletzt bearbeitet:

newbie2009

Bekanntes Mitglied
hey erstmal danke für eure hilfe .
habe nun den quelltext überarbeitet .
Nur das mit dem Listener macht mir noch probleme.

Java:
import java.awt.*;
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.JTextField;






public class Sudokufenster extends JPanel{
	
	 JTextField[] feld1 = new JTextField[9];


	
	 // Konstruktor
	 
	 
public Sudokufenster(){
	
	
	super(new GridLayout(3, 3, 3, 3));
	for(int i =0;i<9;i++){
	feld1 [i] = new JTextField();	
	add(feld1[i]);}

	
}


 
void felderbelegen(Sudokufenster[]neu,int [][] zahlen){
	
	for(int i=0;i<zahlen.length;i++){
		for(int z=0;z<zahlen[i].length;z++){
			
				neu[i].feld1[z].setText(String.valueOf(zahlen[i][z]));
			
			
		}
		
	}
	
	
}




	



	
	public static void main (String[]args){

// BeispielFelder
		int[][]felder = new int[9][9];
		felder[0][0]=1;
		felder[0][1]=1;
		felder[0][2]=1;

		//Komponenten		
		TextField[] feld2 = new TextField[9];
		TextField feldchen = new TextField("leeres feld");
        JButton fill = new JButton("werte auf 0 setzen ");
        JButton loesen = new JButton ("sudoku felder lösen");
        JFrame frame = new JFrame("sudokufield");
        
        
        // Array für Sudokufensterobjekte
        Sudokufenster[]sud= new Sudokufenster[9];
        
        
     
        
        
        // erstelle ein  Array mit sudokufenster obejkten 
        
        for(int i=0;i<sud.length;i++){
    		sud[i]	= new Sudokufenster();
    		frame.add(sud[i]);
    		}
        
        
        
        Sudokufenster instanz = new Sudokufenster();
        
        instanz.felderbelegen(sud,felder);
          
        // Komponenten zusammenfügen 
        
        fill.addActionListener(new Mylistener());
        frame.add(fill);
        frame.add(loesen);
        frame.add(feldchen);
        frame.setLayout(new GridLayout(4, 3, 2, 2));
        frame.setVisible(true);
     

		
		
	}
}




class Mylistener implements ActionListener {

	
	public void actionPerformed(ActionEvent arg0) {
		
		
	}
	
	
	


	
}
 

Lowpass

Aktives Mitglied
Wirklich viel verändert hat sich aber nicht wirklich...

Du musst feldbelegen() nun das Sudokufenster nicht mehr übergeben, weil feldbelegen() ja zu einem Sudokufenster gehört und entsprechend Zugriff auf alle Member hat. Zudem solltest Du alles, was zum Fenster gehört, aus der main-Methode rausnehmen.

Ich empfehle Dir, als nächstes mal das Kapitel 3 in "Java ist auch eine Insel" duchzulesen und allenfalls Verständnis-Fragen zu stellen:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3 Klassen und Objekte

Hier funktioniert "Learning by doing" meiner Meinung nach nur bedingt. Ums Lesen wirst Du wohl nicht herumkommen.

.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E ActionListener Java Basics - Anfänger-Themen 4
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
J Array Actionlistener Java Basics - Anfänger-Themen 9
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
P Erste Schritte ActionListener Java Basics - Anfänger-Themen 2
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb ActionListener Java Basics - Anfänger-Themen 1
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
F ActionListener mit Files etc Java Basics - Anfänger-Themen 12
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
U ActionListener mit JMenuItems verknüpfen Java Basics - Anfänger-Themen 1
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
L Problem bei Java-ActionListener Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
JavaNewbie2.0 ActionListener Java Basics - Anfänger-Themen 11
Voreck Actionlistener problem Java Basics - Anfänger-Themen 1
G Im ActionListener eine "äußere" Variable verändern Java Basics - Anfänger-Themen 13
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
M public static int in ActionListener Java Basics - Anfänger-Themen 6
S actionlistener timer Java Basics - Anfänger-Themen 9
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
P aus ActionListener auf HauptFrame zugreifen Java Basics - Anfänger-Themen 4
A Klassen Bool Actionlistener Java Basics - Anfänger-Themen 2
K Methoden ActionListener wird übersprungen Java Basics - Anfänger-Themen 3
S actionlistener Java Basics - Anfänger-Themen 29
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
J ActionListener Java Basics - Anfänger-Themen 5
A ActionListener Java Basics - Anfänger-Themen 9
R Problem mit ActionListener für Buttons Java Basics - Anfänger-Themen 5
Z ActionListener wird nicht erkannt? Java Basics - Anfänger-Themen 5
T ActionListener Source vergleichen Java Basics - Anfänger-Themen 8
T Frage zum ActionListener Java Basics - Anfänger-Themen 5
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
I ActionListener reagiert nicht Java Basics - Anfänger-Themen 6
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
D Erste Schritte Buttons mit actionlistener Problem Java Basics - Anfänger-Themen 3
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S ActionListener, Methoden und Variablen Java Basics - Anfänger-Themen 4
X Variablen Actionlistener | Variablen-namen Java Basics - Anfänger-Themen 5
G ActionListener implementieren Java Basics - Anfänger-Themen 12
T Erste Schritte Berechnete Variable im ActionListener zurückführen Java Basics - Anfänger-Themen 6
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
M Button , actionlistener Java Basics - Anfänger-Themen 11
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
M Actionlistener Java Basics - Anfänger-Themen 9
D Problem mit ausgelagertem Actionlistener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
M Klassen Durch den ActionListener das GUI einer anderen Klasse verändern Java Basics - Anfänger-Themen 8
T NullPointerException im ActionListener Java Basics - Anfänger-Themen 3
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E JMenu ActionListener reagiert nicht? Java Basics - Anfänger-Themen 6
V ActionListener in einer for-Schleife Java Basics - Anfänger-Themen 2
S Erste Schritte ActionListener auf Buttons einrichten Java Basics - Anfänger-Themen 3
M Variablen Variable lässt sich durch ActionListener nicht ändern Java Basics - Anfänger-Themen 5
P ActionListener Action Event Java Basics - Anfänger-Themen 5
L ActionListener zerschießt AnchorLayout Java Basics - Anfänger-Themen 8
D ActionListener braucht zwei Klicks auf Button??? Java Basics - Anfänger-Themen 2
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
Y Actionlistener passt nicht zu Dataset Java Basics - Anfänger-Themen 6
W Problem mit FileWriter / ActionListener Java Basics - Anfänger-Themen 6
F actionListener Java Basics - Anfänger-Themen 3
T ActionListener auslagern Java Basics - Anfänger-Themen 14
S Actionlistener funktionieren nicht in der .jar Java Basics - Anfänger-Themen 9
E ActionListener abwarten lassen? Java Basics - Anfänger-Themen 11
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
H ActionListener Verbesserung möglich? (This) Java Basics - Anfänger-Themen 3
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
V ActionListener bei vielen Modulen Java Basics - Anfänger-Themen 3
J ActionListener Java Basics - Anfänger-Themen 2
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4
S ActionListener Java Basics - Anfänger-Themen 4
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
K Actionlistener Java Basics - Anfänger-Themen 7
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
A ActionListener im JMenu - Problem Java Basics - Anfänger-Themen 2
M ActionListener reagiert nicht Java Basics - Anfänger-Themen 4
H Bewegtes Bild im ActionListener [Problem] Java Basics - Anfänger-Themen 12
D Liste+ActionListener Java Basics - Anfänger-Themen 6
L wie Jframe an ActionListener übergeben Java Basics - Anfänger-Themen 4
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
Luk10 Problem mit ActionListener Java Basics - Anfänger-Themen 6
R Viereck zeichnen über TextField-Eingabe /ActionListener Java Basics - Anfänger-Themen 9
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
C ActionListener problem Java Basics - Anfänger-Themen 4
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben