actionListener

fix

Mitglied
Guten Abend,

ich habe ein Textfeld, welches ich per Enter prüfen lasse, ob die Felder ausgefüllt sind oder nicht. Mein Code dazu:
Java:
          textfield1 = new JTextField(6);
          textfield1.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
   		  ausrechnen();
		  }
		  });
          rechts.add(textfield1);

Meine Frage dazu, wäre es möglich die Sache etwas zu vereinfachen damit ich bei z.B. 30 Textfeldern keine endlosen Zeilen an Code habe? Ich dachte dazu an sowas wie:

Java:
          textfield1 = new JTextField(6);
          textfield1.addActionListener(this);
          rechts.add(textfield1);

          textfield2 = new JTextField(6);
          textfield2.addActionListener(this);
          rechts.add(textfield2);

Leider waren meine Ansätze bisher alle vergebens.
 
Ein JTextField-Array der Größe 30, drüber iterieren und den Code ausführen für jedes Textfeld?
Java:
		JTextField[] fields = new JTextField[30];
		for (int i = 0; i < fields.length; i++) {
			 fields[i] = new JTextField(6);
			 fields[i].addActionListener(this);
	         rechts.add(fields[i]);
		}
Was waren denn deine Ansätze? Bei addActionListener(this) muss deine Klasse natürlich den ActionListener implementieren, und nicht wie im ersten Code eine anonyme innere Klasse !
 
Hier mal der Code:

Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.GridLayout.*;

public class Rechner implements ActionListener {

     JFrame applikation;
     Container container;
     JPanel main;
     JPanel down;

     private JTextField tpreis;
     private JTextField tsteigung;
	 private JTextField tjahre;
     private JTextField tergebnis;

     // Menüleiste
     JMenuBar menueLeiste;

     // Menüleiste Elemente
     JMenu datei;

     // Datei

     JMenuItem beenden;

     public Rechner() {
          applikation = new JFrame("Rechner");
          container = applikation.getContentPane();
          main = new JPanel();
          down = new JPanel();


          main.setLayout( new GridLayout(/*3*/ 4, 5, 5, 5) );		// Zeilengröße 3
          down.setLayout( new GridLayout(/*3*/ 2, 5, 5, 5) );		// Zeilengröße 3

          main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));

		  JLabel preis = new JLabel();
		  preis.setText("<html>&nbsp;Preis [€]:</html>");
		  main.add(preis);

		  tpreis = new JTextField();
		  tpreis.setToolTipText("Preis");
		  tpreis.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
   		  ausrechnen();
		  }
		  });
 		  main.add(tpreis);

 		  JLabel steigung = new JLabel();
		  steigung.setText("<html>&nbsp;jährliche Steigerung [%]:</html>");
		  main.add(steigung);

		  tsteigung = new JTextField();
		  tsteigung.setToolTipText("Preissteigung");
		  tsteigung.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
   		  ausrechnen();
		  }
		  });
 		  main.add(tsteigung);

		  JLabel jahre = new JLabel();
		  jahre.setText("<html>&nbsp;Jahre:</html>");
		  main.add(jahre);

		  tjahre = new JTextField();
		  tjahre.setToolTipText("Anzahl der Jahre");
		  tjahre.addActionListener(new ActionListener(){
		  public void actionPerformed(ActionEvent e){
   		  ausrechnen();
		  }
		  });
 		  main.add(tjahre);

		  JLabel ergebnis = new JLabel();
		  ergebnis.setText("<html>&nbsp;Endpreis [€] :</html>");
		  main.add(ergebnis);

		  tergebnis = new JTextField(4);
		  tergebnis.setToolTipText("dynamischer Wasserpreis");
		  tergebnis.setEditable(false);
 		  main.add(tergebnis);

 		  JLabel leer = new JLabel("<html>&nbsp;</html>");
 		  down.add(leer);

  		  // Button
  		  JButton berechnen = new JButton("Berechnen");
		  berechnen.addActionListener(
    	  new ActionListener() {
          public void actionPerformed(ActionEvent e){
   		  ausrechnen();
		  }
		  });




          down.add(berechnen);

          // Menüleiste erzeugen
          menueLeiste = new JMenuBar();

          // Menüelemente erzeugen
          datei = new JMenu("Datei");

          // Untermenüelemente erzeugen
          beenden = new JMenuItem("Beenden");
          beenden.addActionListener(this);

          // Menüelemente hinzufügen
          menueLeiste.add(datei);

          // Untermenüelemente hinzufügen
          datei.add(beenden);

		  applikation.add(menueLeiste, BorderLayout.NORTH);
          applikation.add(main, BorderLayout.CENTER);
          applikation.add(down, BorderLayout.SOUTH);

          applikation.setSize(280, 280);									// Fenstergröße
          applikation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          applikation.setVisible(true);
     }



     public void actionPerformed(ActionEvent object) {
          if (object.getSource() == beenden){
               System.exit( 0 );

          }

     }

    
    private void ausrechnen(){
    
    try
   				{
     				// Komma in Punkt zum rechnen Umwandeln für den Preis
					String Preis = tpreis.getText();
					Preis = Preis.replace(',', '.');
      				double p = Double.parseDouble(Preis);

					// Komma in Punkt zum rechnen Umwandeln für die Steigung
					String Steigung = tsteigung.getText();
					Steigung = Steigung.replace(',', '.');
      				double s = Double.parseDouble(Steigung);

      				// Komma in Punkt zum rechnen Umwandeln für die Jahre
      				String Jahre = tjahre.getText();
					Jahre = Jahre.replace(',', '.');
      				double j = Double.parseDouble(Jahre);


      				double Zins;
					Zins = (s/100)+1;

					double summe = 0;

					for (int i = 0; i < j; i++)
        			{
          			p = p * Zins;
          			summe = summe += p;
          			}

          			String s1 = String.format(" %.4f" , summe);
					tergebnis.setText(s1);

				}
				catch (NumberFormatException ex )
   				{
   					System.out.println("falsche Daten eingegeben.");
				}

        		}
    
    


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

So kann ich per Enter prüfen ob die Felder ausgefüllt sind oder nicht. Da ich mit den Feldern ja rechnen will, weiß ich gar nicht wie ich bei dir die einzelnen Textfelder anwenden kann. Ich dachte nur das man diesen ganzen Block etwas zusammenfassen könnte.
 
Hallo.

z.B.
Java:
tjahre = new JTextField();
tjahre.setToolTipText("Anzahl der Jahre");
tjahre.addActionListener(this);


Java:
public void actionPerformed(ActionEvent e) {
    if (e.getSource() instanceof JTextField){
         JTextField jtf = (JTextField)e.getSource();
         //Test
         //if (jtf.getText().length() > 0) 
         //     System.out.println("nicht leer");
        }
    }

Gruß Attila
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben