Variablen aus einer Schleife gezielt auslesen

Asumanji

Mitglied
Hallo,
ich habe ein kleines Problem:
ich weiß nicht wie ich aus einer Kopfgesteuerten Schleife in der ich Buttons erzeuge eine Variable auslesen kann und an eine andere Klasse übergeben kann.

Java:
int i = 1;
while(i <= 30){
JButton button = new JButton();
String buttontext = String.valueOf(i);
button.setText(buttontext);
add(button);

button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){				
	new klasse();
}
});

i++
}

Es werden also 30 Buttons mit der Aufschrift 1 - 30 erstellt, das funktioniert auch, auch wird beim klicken auf einen Button die neue Klasse klasse() aufgerufen, aber wie kann ich jetzt die Variable i für den passenden Button übergeben? Also ich meine wenn ich auf den Button 13 drücke, dann soll die 13 in die neue Klasse übergeben werden, und wenn ich auf einen anderen Button drücke soll natürlich eine entsprechend andere Zahl übergeben werden.
 

VfL_Freak

Top Contributor
Moin,

warum verwaltest Du die Button nicht in einer geeigneten Struktur (Array, Liste etc.) ?
Dann hättest Du einen Index, über den Du zugreifen kannst !

Gruß Klaus
 

Flown

Administrator
Mitarbeiter
Im ActionEvent kannst du die Source abfragen. D.h. du castest dein SourceObjekt auf deinen Button und liest dessen Text aus, so:

Java:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

  public static void main(String[] args) {
    new Test();
  }

  public Test() {
    JFrame frame = new JFrame("Dropdown");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);

    JPanel mainPanel = new JPanel();

    for (int i = 0; i < 5; i++) {
      JButton btn = new JButton(String.valueOf(i));
      btn.addActionListener(e -> {
        if (e.getSource() instanceof JButton) {
          JButton button = (JButton) e.getSource();
          System.out.println(button.getText());
        }
      });
      mainPanel.add(btn);
    }

    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }
}
 

Asumanji

Mitglied
Danke schon mal für die Antworten.
Die Möglichkeit von Flown gefällt mir besser.
Ich hab es nun für meine Zwecke umgewandelt und es wird auch richtig die Zahl des Buttons in der Console angezeigt.
Jetzt will ich das ganze aber in einer Variablen haben. Wenn ich es richtig verstanden habe, denn brauche ich eine "public String" Variable.
Mit dem ändern von Zeile 23 von Flown auf
Java:
variable = button.getText();
bekomme ich beim Verwenden in der nächsten Klasse aber "null" ausgegeben.
Das verstehe ich nicht, denn vorher hat ja die gleich Variable, welche den Wert i als Referenz hat immer 30 ausgegeben und ich habe nix weiter geändert.
 

Flown

Administrator
Mitarbeiter
Ohne Code können wir nur raten und das macht keinen Spaß!

Poste doch mal ein KSKB und dann reden wir weiter.
 

Joose

Top Contributor
Java:
variable = button.getText();
bekomme ich beim Verwenden in der nächsten Klasse aber "null" ausgegeben.
Das verstehe ich nicht, denn vorher hat ja die gleich Variable, welche den Wert i als Referenz hat immer 30 ausgegeben und ich habe nix weiter geändert.

Mehr Code wäre sinnvoll, ich nehme aber an du deklarierst eine Variable 2x und setzt aber nur bei einer der beiden den Wert wirklich
 

Asumanji

Mitglied
Okay, ich hab das Problem mal auf seinen Kern runter gebrochen (und hab damit nen weiteren Bug erstellt)

Hier die erste Klasse mit der Schleife
Java:
package ksks;

import java.awt.GridLayout;

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

public class ksks extends JFrame {
	private static final long serialVersionUID = 1L;
	
	private JFrame beispiel = new JFrame("Beispiel");
	
	public String variable;

	public static void main(String[] args) {
		new ksks();
	}
	
	public ksks(){
		beispiel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		beispiel.setVisible(true);
		beispiel.setExtendedState(JFrame.MAXIMIZED_BOTH);
		beispiel.setLayout(new GridLayout(0,7));
		
		for(int i = 1; i <= 30; i++){
			JButton btn = new JButton(String.valueOf(i));
			beispiel.add(btn);

			btn.addActionListener(e -> {
		        if (e.getSource() instanceof JButton) {
		            JButton button = (JButton) e.getSource();
		            variable = button.getText();
		            new klasse();
		          }
		        });
		}
	}
}

Und die 2. Klasse in der die Variable genutzt werden sollte

Java:
package ksks;

import java.awt.GridLayout;

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

public class ksks extends JFrame {
	private static final long serialVersionUID = 1L;
	
	private JFrame beispiel = new JFrame("Beispiel");
	
	public String variable;

	public static void main(String[] args) {
		new ksks();
	}
	
	public ksks(){
		beispiel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		beispiel.setVisible(true);
		beispiel.setExtendedState(JFrame.MAXIMIZED_BOTH);
		beispiel.setLayout(new GridLayout(0,7));
		
		for(int i = 1; i <= 30; i++){
			JButton btn = new JButton(String.valueOf(i));
			beispiel.add(btn);

			btn.addActionListener(e -> {
		        if (e.getSource() instanceof JButton) {
		            JButton button = (JButton) e.getSource();
		            variable = button.getText();
		            new klasse();
		          }
		        });
		}
	}
}

Lustigerweise wird bei dem Beispiel die erste Klasse nochmal neu aufgerufen wenn man irgenteinen Button betätigt, das Problem hatte ich allerdings bei meinem Programm nicht

Edit: wenn man der Variablen einen Startwert zuordnet, bsp:
Java:
public String variable = "test";
so wird dieser ausgegeben, d.h. also das die Variable nicht geändert wird bevor sie in der nächsten Klasse genutzt wird?!
 
Zuletzt bearbeitet:

Asumanji

Mitglied
Haha xD
Es ist ja auch schon spät
Jetzt aber hoffentlich die richtige 2. Klasse

Java:
package ksks;

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class klasse extends ksks {
	static final long serialVersionUID = 1L;
	private JFrame beispiel_klasse = new JFrame("Beispiel");
	private JLabel lblBeispiel = new JLabel();

	public klasse(){
		beispiel_klasse.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		beispiel_klasse.setVisible(true);
		beispiel_klasse.setBounds(0, 0, 400, 150);
		beispiel_klasse.setLayout(new GridLayout(0,1));
		
		lblBeispiel.setText(variable + ". Button wurde gedrückt");
		beispiel_klasse.add(lblBeispiel);
	}
}
 

Flown

Administrator
Mitarbeiter
Ich glaube du wolltest versuchen mit Vererbung eine Variable weiterzuleiten. Ich kann dir dringlichst raten, nochmal die Grundlagen durchzugehen.

Du erstellst eine neue Instanz deiner Klasse die eine Sub-Klasse von ksks ist. Diese hat aber andere Instanzvariablenbelegungen.

Achja sowas löst man, indem man Referenzen mitgibt und hält und bei dieser dann Methoden aufruft.

Java:
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

  public static void main(String[] args) {
    new Test();
  }

  private MyDialog myDialog;

  public Test() {
    JFrame frame = new JFrame("Buttons");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);

    JPanel mainPanel = new JPanel();

    for (int i = 0; i < 5; i++) {
      JButton btn = new JButton(String.valueOf(i));
      btn.addActionListener(e -> {
        if (e.getSource() instanceof JButton) {
          JButton button = (JButton) e.getSource();
          if (myDialog == null) {
            myDialog = new MyDialog(frame);
          }
          myDialog.setLabelText(button.getText() + " was pressed!");
        }
      });
      mainPanel.add(btn);
    }

    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }
}

class MyDialog {

  private JLabel label;

  public MyDialog(JFrame frame) {
    JDialog dialog = new JDialog(frame);
    dialog.setLocationByPlatform(true);
    dialog.setSize(150, 70);
    dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    JPanel mainPanel = new JPanel();
    label = new JLabel();
    mainPanel.add(label);
    dialog.add(mainPanel);
    dialog.setVisible(true);
  }

  public void setLabelText(String text) {
    label.setText(text);
  }

}
 

Asumanji

Mitglied
Da hast du Recht, die Grundlagen fehlen mir :(
Dein Programm funktioniert natürlich so wie ich es wollte.
Leider hab ich auch bisher nicht verstanden was man in "()" schreibt und was es bedeutet, wie bei dir z.B.
Java:
myDialog = new MyDialog(frame);

oder

Java:
 public MyDialog(JFrame frame) {
...
}

Ist das die Vererbung, die du angesprochen hast?
 

Flown

Administrator
Mitarbeiter
Auweia... Schnapp dir ein Buch, (Online-)Tutorial und geh das mal durch bevor du dich an GUIs versuchst.

Das mit "()" sind Parameterübergaben an Konstruktoren:
Java:
public MyDialog(JFrame frame){...}

und an Methoden:
Java:
myDialog.setLabelText(button.getText() + " was pressed!");

Das hat was mit Referenzen zu tun und nichts mit Vererbung!

Die Vererbung von der ich gesprochen habe ist bei dir an der Stelle (extends):
Java:
public class klasse extends ksks{...}

Wie schon gesagt, Tutorials/Buch lesen und Grundlagen machen und dann mit Verständnis an die Sache gehen und nicht wild drauf los programmieren.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
X Variablen Variablen erzeugen in einer Schleife? Java Basics - Anfänger-Themen 6
M Effizienter Variablen außerhalb einer Schleife zu deklarieren? Java Basics - Anfänger-Themen 1
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
J Zeilen aus einer .txt-Datei auslesen und Variablen zuweisen Java Basics - Anfänger-Themen 11
M Sortieren von einer Liste - zwei zugehoerige Variablen Java Basics - Anfänger-Themen 5
J Variablen überschreiben innerhalb einer Klasse Java Basics - Anfänger-Themen 7
J Wie behalten Variablen den Wert, den sie in einer anderen Methode erhalten haben? Java Basics - Anfänger-Themen 14
L Aus einer String Variablen ein Objekt erstellen Java Basics - Anfänger-Themen 14
K Einer Variablen Werte von anderen Variablen zuweisen Java Basics - Anfänger-Themen 5
L auslesen einer Variablen eines Objekt welches "Eigentum" eines Objektes der selben Klasse ist. Java Basics - Anfänger-Themen 12
C Datentyp von einer Variablen ermitteln. Java Basics - Anfänger-Themen 12
G Zugriff auf private Variablen einer inneren Klasse Java Basics - Anfänger-Themen 5
N variablen vom typ einer abstrakten Klasse Java Basics - Anfänger-Themen 5
J Von einer Klasse auf Variablen der anderen Klasse zugreifen Java Basics - Anfänger-Themen 8
K Übergabe einer im EventListener definierte variablen Java Basics - Anfänger-Themen 2
A Ausgabe einer variablen im textfeld Java Basics - Anfänger-Themen 3
M Variablen einer Klasse zu durchlaufen möglich? Java Basics - Anfänger-Themen 5
P Variablen in einer anderen Klasse ueberschreiben Java Basics - Anfänger-Themen 2
C Deklaration einer Variablen in einem rekursivem Aufruf Java Basics - Anfänger-Themen 5
M den Pfad einer txt-Datei in einer variablen speichern Java Basics - Anfänger-Themen 6
C Objekt soll sich selber einer Variablen zuweisen. Java Basics - Anfänger-Themen 6
E Mathematisch parsen, aber mit einer Variablen X ! Java Basics - Anfänger-Themen 6
H Unterschied statischer/dynamische Typ einer Variablen Java Basics - Anfänger-Themen 2
G Definition einer logischen Variablen Java Basics - Anfänger-Themen 4
Z Prüfung auf existenz einer Variablen Java Basics - Anfänger-Themen 4
C auf Variablen von Methoden einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 7
C Aus einer *.csv Datei bestimmte Werte Variablen zuweisen Java Basics - Anfänger-Themen 19
bernd Werte einer Variablen auslesen! Java Basics - Anfänger-Themen 4
M Eibettung einer Variablen in eine Berechnung Java Basics - Anfänger-Themen 5
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben