Rückgabe vom ActionListener

Status
Nicht offen für weitere Antworten.

Runnerle

Mitglied
Erstmal Hallo liebe Community,

Im vorraus:
Ich habe mich mit meinem Problem schon beschäftigt spricht gegoogelt und mir gott weiß was durchgelesen, aber ich bin leider zu keinem Ergebnis gekommen das mir weiter geholfen hat oder ich verstanden habe.

Zum Problem:
Ich habe ein Datei Öffnen Button erstellt auf dessen Klick sich ein Dateiauswahldialog öffnet. Der Pfad wird dann in einer Variable gespeichert.
Mein Problem ist jetzt nur dass ich die Variable nur innerhalb meines ActionListeners nutzen kann. Jedoch brauche ich diesen Pfad auch zum Abspeichern, was aber in einem anderen ActionListener geschieht.

Gibt es eine Möglichkeit die Variable da irgentwie rauszubekommen?

mfg Runnerle
 
Du speicherst die Variable in irgendeiner Klasse vom Listener aus.

Beispiel:

void MeinListener (...){

Verwaltungsklasse.setPfad(...);

}
 
In etwa so?


Code:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
import java.io.*;

public class Test {
	
		public class meine{
			
			public File out(File hallo){
				
				return hallo;	
				
				}
				
			}
	
public static void main( String[] args ) {
		
	
		JFrame frame = new JFrame("Mein Text");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(200,200);
		frame.setAlwaysOnTop(true);
		
		ActionListener listen = new ActionListener(){
			public void actionPerformed(ActionEvent g){
				JFileChooser asd = new JFileChooser();
				asd.showOpenDialog(null);
				File file = asd.getSelectedFile();
					meine.out(file);
			}
		};
		
			JButton button = new JButton("Action");
			button.addActionListener(listen);
			

		frame.setVisible(true);

} 
}

Jedoch unterkringelt eclipse mir dann die Zeile: meine.out(file);
Meldung: Can not make a static reference to a non-static method out(file) from type Test.meine
 
Du müsstest entweder ein Objekt von "meine" erstellen, oder die funktion statisch (static) deklarieren.

Brauchst du den Pfad für jedes Objekt extra oder ist es immer der gleiche? Wenn es immer der gleiche ist --> mach die Funktion (Und die Variable wo du sie drin speicherst!) statisch.


Hier übergisbt du die File anscheinend, musst sie aber in irgend einer Variable speichern!
 
Zweiter Versuch:
Code:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

public class Test {
   
      public static class meine{
         static File hallo;
         public static File out(File hallo){
            System.out.println(hallo);
            return hallo;   
            
            }
            
         }
   
public static void main( String[] args ) {
      
   
      JFrame frame = new JFrame("Mein Text");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200,200);
      frame.setAlwaysOnTop(true);
      
      ActionListener listen = new ActionListener(){
         public void actionPerformed(ActionEvent g){
            JFileChooser asd = new JFileChooser();
            asd.showOpenDialog(null);
            File file = asd.getSelectedFile();
               meine.out(file);
         }
      };
      
         JButton button = new JButton("Action");
         button.addActionListener(listen);
         frame.add(button);

      frame.setVisible(true);

}
}

Habe die Klasse und die Funktion static gemacht, und hab zum Test mal eine Konsolenausgabe in die Funktion geschrieben, die auch ausgeführt wird. Jedoch weiß ich jetzt nicht wie ich den Wert in eine Variable übergeben kann, dich ich dann nachher im Hauptprogramm weiter benutzen kann :/ .
Jetzt im moment gehts mit dem return anscheinend nicht.

mfg Raze
 
So hab es letztendlich dochnoch geschafft 🙂

Hier mein Lösungsansatz:
Code:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

public class Test {
   
     
         static File hallo;
         public static File out(File bye){
            System.out.println(bye);
            return hallo = bye;   
            
            }
            
         
   
public static void main( String[] args ) {
      
   
      JFrame frame = new JFrame("Mein Text");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200,200);
      frame.setAlwaysOnTop(true);
      frame.setLayout(new FlowLayout());
      
      ActionListener listen = new ActionListener(){
         public void actionPerformed(ActionEvent g){
            JFileChooser asd = new JFileChooser();
            asd.showOpenDialog(null);
            File file = asd.getSelectedFile();
               out(file);
         }
      };
      
      ActionListener hear = new ActionListener(){
    	  public void actionPerformed(ActionEvent a ){
    		  	System.out.println(hallo);
    	  }
      };
      
         JButton button = new JButton("Action");
         button.addActionListener(listen);
         frame.add(button);
         JButton button2 = new JButton("Hear");
         button2.addActionListener(hear);
         frame.add(button2);
      frame.setVisible(true);

}
}

Vielen Dank für die Hilfe Ocean-Driver, du hast mir wirklich sehr geholfen 🙂

mfg Runnerle
 
Das ist ein falscher Ansatz. Wenn du die Datei übergibst, brauchst du sie doch nicht noch zurückgeben!

Am besten wäre:

Code:
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import java.io.*; 

public class Test {

String pfad = "";


public static void savePfad(File MyFile)
{
this.pfad = MyFile.getAbsolutPath(); 
}




public static void main(String[] args){

File Datei = new File("");

savePfad(Datei);


}
 
also ich habe dasselbe problem...

der öffnen-dialog wird vom Action listener aufgerufen und bekommt dann den dateipfad als string geliefert:

Code:
//datei öffnen	
Action actionOpenFile = new AbstractAction( "Datei Öffnen" ) 
{ 
  	public void actionPerformed(ActionEvent e) 
  	{
    		//dateipfad bekommen
    		filepath = createDialog.dialogOpenFile();
  	} 
};
da funktioniert auch, mit System.out.println(filpath) innerhalb des ActionListeners bekomme ich den dateipfad....
aber der actionListener ist teil der klasse showMenu, und ich möchte, dass diese den string filepath, wenn der öffnen dialog aufgerufen wurde, zurückgibt....
wie geht das und ist das überhaupt möglich?
ich verstehe die hier genannten ansätze nicht so wirklich ^^
 
Ocean-Driver hat gesagt.:
Das ist ein falscher Ansatz. Wenn du die Datei übergibst, brauchst du sie doch nicht noch zurückgeben!

Am besten wäre:

Code:
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import java.io.*; 

public class Test {

String pfad = "";


public static void savePfad(File MyFile)
{
this.pfad = MyFile.getAbsolutPath(); 
}




public static void main(String[] args){

File Datei = new File("");

savePfad(Datei);


}

Stimmt du hast recht, ich werde das nochmal überarbeiten.

Mfg
 
Ich finde es hier so krass, dass Leute bereits mit der GUI-Programmierung anfangen, aber nichtmal wissen, wie man etwas in einer Variable speichert!

Das event gibt GARNICHTS zurück, dass Event übergibt die Variable einfach an eine Klasse (zum Beispiel über eine Settermethode)


Code:
class MyConfig{

private String pfad="";

public void setPfad(String pfad){
this.pfad = pfad;
}

}
 
mir ist klar das ein event nichts zurückgibt -.- soweit war ich auch bereits

deshalb brauche ich ja auch eine andere lösung

Code:
public class CDDMenu extends JPanel implements ActionListener
{
	public static CDDFile createFile = new CDDFile();
	
	//Variabel für die Dateiinhalte setzten
            public String filepath = "";

            public void showMenu(JFrame rahmen)
            {
    	         //menü
    	        JMenuBar menuBar = new JMenuBar(); 
    		
    	        //menüaktionen
   	       //datei öffnen	
	      Action actionOpenFile = new AbstractAction( "Datei Öffnen" ) 
    	      { 
  			public void actionPerformed(ActionEvent e) 
  			{
    			//dateipfad bekommen
    			filepath = createDialog.dialogOpenFile();
  			} 
                    };
    	
    	            //Datei-Menü	
	            JMenu fileMenu = new JMenu( "Datei" ); 
		menuBar.add( fileMenu ); 
		rahmen.setJMenuBar( menuBar );
		fileMenu.add( new JMenuItem(actionOpenFile) );	
			
		System.out.println(filepath); 		        
 }

 public void actionPerformed(ActionEvent ae)
    {
      
    }

so, das ist mein code, wenn aich ein wenig gekürzt......
wie stelle ich es den nun an, dass die variabel filepath ausgegeben wird, weil wenn ich das programm jetzt aufrufe, wird nur am anfang der inhalt von filepath ausgegeben..... und zu dem zeitpunkt ist ja nix in der variabel!
wie stelle ich also nun fest, dass das öffnen-menü gestartet wurde und die variabel filepath gesetzt?
 
Code:
public class CDDDialog extends JPanel implements ActionListener
{
    //dialoge für das menü
    public String dialogOpenFile()
    {
     JFileChooser fc = new JFileChooser();
     fc.showOpenDialog(null);
     return fc.getSelectedFile().toString();
    }
}

es wird mit der methode also der öffnen-dialog gestartet und die ausgewählte datei als String übergeben... das funktioniert dann auch soweit.... innerhalb meines events kann ich mit System.out.println(filepath); den dateipfad anzeigen lassen.....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben