Events

Status
Nicht offen für weitere Antworten.

speedy-j

Mitglied
Hallo Leute,

habe das Forum nach passenden Beiträgen durchsucht, konnte aber so schnell keine passende Lösung für mein Prob. finden. Bin noch relativ neu in Java und möchte mich mit Events und Lsitener vertraut machen. Ich möchte eine Logische Trennung nach dem MVC Prinzip vornehmen. Ich habe einen Button der soll beim drücken ein Textfeld, Label oder eine andere Komponente ändern. Irgendwie bekomme ich das aber nicht hin. Kann mir da Jemand evtl ein Paar Tipps geben.

Danke für Eure Bemühungen
 
B

Beni

Gast
ActionListener beim Button registrieren, und wenn das Event (Method eactionPerformed des Listeners wird aufgerufen) auftritt das Textfeld, Label oder etc. abändern?

Deine Frage lässt viel Spielraum offen, wie sie zu verstehen ist...
 

hupfdule

Top Contributor
Buttons haben das bereits implementiert. Dafür sind die ActionListener zuständigl. Du musst also dem Button einen ActionListener hinzufügen und darin führst du dann aus, was du willst:

Code:
button.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent evt){
                  // hier änderst du die anderen Komponenten
          }
});

(ohne Gewähr der syntaktischen Korrektheit)
 

speedy-j

Mitglied
Danke für die schnellen Antworten,

ich habe das soweit auch hinbekommen, aber wenn ich dem Button ein Listener zufüge, dann kann ich nicht auf ein Label oder ein Textfeld zugreifen. Die Variable jlbl_OK in Zeile 44 kennt er nicht. Was mache ich falsch und wie kann ich später die Funktionen auslagern um eine Trennung von Gui und Logik zu garantieren?

Danke

Code:
package gui;
import java.awt.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class MainFrameGui extends JFrame  implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7978469965404274136L;
	
		

	public MainFrameGui(){
		 
		  //addWindowListener(new WindowClosingAdapter(true));
		  //setLayout(new FlowLayout());
		
		  JPanel jpl_main = new JPanel();
		  JLabel jlbl_Ok = new JLabel("Name:", SwingConstants.LEFT);
		  
		  JTextField jtf_namen = new JTextField(30);
		  jtf_namen.setToolTipText("Geben Sie ihren Namen ein");
		  JButton jbtn_push = new JButton("Name");
		  jbtn_push.addActionListener(this);
		  jpl_main.add(jtf_namen);
		  jpl_main.add(jlbl_Ok);
		  jpl_main.add(jbtn_push);
		  this.add(jpl_main);
		  this.pack();
		  this.setVisible(true);
		  
	}

	public void actionPerformed(ActionEvent event) {
		// TODO Auto-generated method stub
		jlbl_Ok.setText("Anderer Text");
		System.exit(0);
		
		
	}
 

hupfdule

Top Contributor
Deine Komponenten sind namentlich nur im Konstruktor bekannt. Damit kannst du natürlich von nirgendwoher drauf zugreifen. Definier diese als Klassenvariablen und es geht.
 
B

Beni

Gast
Code:
package gui;
import java.awt.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class MainFrameGui extends JFrame  implements ActionListener{
   /**
    *
    */
   private static final long serialVersionUID = -7978469965404274136L;
   
  // ********
  // Das Label muss dem gesammten Objekt bekannt gemacht werden
   private JLabel jlbl_Ok;

   public MainFrameGui(){
      
        //addWindowListener(new WindowClosingAdapter(true));
        //setLayout(new FlowLayout());
      
        JPanel jpl_main = new JPanel();

        // ******
        // Keine lokale Definition von jlbl_Ok mehr!
        jlbl_Ok = new JLabel("Name:", SwingConstants.LEFT);
       
        JTextField jtf_namen = new JTextField(30);
        jtf_namen.setToolTipText("Geben Sie ihren Namen ein");
        JButton jbtn_push = new JButton("Name");
        jbtn_push.addActionListener(this);
        jpl_main.add(jtf_namen);
        jpl_main.add(jlbl_Ok);
        jpl_main.add(jbtn_push);
        this.add(jpl_main);
        this.pack();
        this.setVisible(true);
       
   }

   public void actionPerformed(ActionEvent event) {
      // TODO Auto-generated method stub
      jlbl_Ok.setText("Anderer Text");
      System.exit(0);
      
      
   }

[Edit: Hupfdule, du meintest wohl Objektvariablen? :wink: ]
 

speedy-j

Mitglied
Danke für die schnellen Antworten

Ihr seid Klasse :applaus:

Gruss

Vielleicht noch ein Frage, sollte man diese Funktionen (Events) bei Größeren Projekten auslagern und wenn ja wie ist die eleganteste Lösung ?
 

JAVAn00b

Bekanntes Mitglied
wie meinst du das auslagern? in einer anderen klasse? wenn ja das würde ich nicht tun. so oder so mußt du ehh den button mit den actionlistener registrieren. du kannst die methoden die du ausführen möchtest auslagern, mehr aber auch nicht.
 

WieselAc

Top Contributor
Wenn du es wirklich 100 % umsetzten willst, dann schreib dein programm zuerst als reine "Konsolen-Applikation". Wenn das fertig ist, mach dir eine GUI drum herum, die nur die Schnittstellen deiner Applikation benutzt.

Ist zwar erstmal etwas lästig aber so geht es am besten und nachher wird es umso leichter zu pflegen und zu erweitern !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Ical4j - Lazy Loading von Events? Java Basics - Anfänger-Themen 2
D Events verarbeiten Java Basics - Anfänger-Themen 1
nonickatall Erste Schritte Events Dokumentation/Tutorial Java Basics - Anfänger-Themen 1
K die Source eines Events bei verschiedenen Quellen herausfinden Java Basics - Anfänger-Themen 1
M Best Practice Events für jeden, oder für die Allgemeinheit "registrieren"? Java Basics - Anfänger-Themen 5
O Wie Log4J - Ausgaben/Events auffangen?! Java Basics - Anfänger-Themen 3
Thallius Best Practice Events zwischen eigenen Klassen Java Basics - Anfänger-Themen 2
G Events schreiben, solange Programm läuft Java Basics - Anfänger-Themen 6
H [JAVA] NetBeans GUI Builder - Events Java Basics - Anfänger-Themen 10
G Erste Schritte Window Events in Java Java Basics - Anfänger-Themen 6
Y Events auslösen Java Basics - Anfänger-Themen 11
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
S Dauer eines Events anhandUnterschied berechnen? Java Basics - Anfänger-Themen 3
Nicer Maus Events Java Basics - Anfänger-Themen 2
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
R wieso Nullpoint und was mit Events ? Java Basics - Anfänger-Themen 14
F Reihenfolge in der Events abgearbeitet werden Java Basics - Anfänger-Themen 2
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
B Events behandeln Java Basics - Anfänger-Themen 4
A Events werfen/feuern wenn bestimtm methode ausgeführt wird Java Basics - Anfänger-Themen 3
E import org.eclipse.swt.Events.PaintListener; Java Basics - Anfänger-Themen 1
M Urheber von Events ermitteln Java Basics - Anfänger-Themen 5
S Eigene Events werfen? Java Basics - Anfänger-Themen 6
G Events manuell aulösen Java Basics - Anfänger-Themen 3
C Listener und Events Java Basics - Anfänger-Themen 10
D Events nicht bei den jeweiligen Objekten? Java Basics - Anfänger-Themen 3
G PropertyChangeListener empfängt Events doppelt Java Basics - Anfänger-Themen 5
F Eigene Klasse für Events Java Basics - Anfänger-Themen 10
G Events Java Basics - Anfänger-Themen 8
S Keylistener-Events hochreichen Java Basics - Anfänger-Themen 4
H Problem mit Events bzw. Referenzen Java Basics - Anfänger-Themen 4
H Events Java Basics - Anfänger-Themen 5
G Loop blockt alle Events Java Basics - Anfänger-Themen 7
D Probleme mit key events Java Basics - Anfänger-Themen 6
S MouseListener - Events auf Mouseklick Java Basics - Anfänger-Themen 14
D Events Java Basics - Anfänger-Themen 4
G Events Java Basics - Anfänger-Themen 2
E Events nicht an aufrufendes Objekt schicken Java Basics - Anfänger-Themen 23
R events . usw Java Basics - Anfänger-Themen 6
S winXP -> window-events Java Basics - Anfänger-Themen 2
D [Problem] Events Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben