Button und Vererbung von diesem

sauerpeter

Mitglied
Hallo Zusammen,
habe hier einen Button, der beim klick nen fenster zur Directory öffnet und wo man sich dann ein File raussuchen kann. Quasi nen Button "Select file".
Geht nur um den Button, nicht dass das dann auch hochgeladen wird oder so, das kommt später.

Der untere Codeausschnitt funktioniert soweit. Jetzt soll dieser aber auch für andere Buttons "Select file" gelten und dementsprechend weiter vererbt werden.

Abgesehen von extends, wie vererbe ich weiter? So das der Button x das gleiche macht, ohne aber den ganzen Code an anderer Stelle xplizit nochmal zu haben???

Danke für eure Hilfe!!! :applaus::applaus::applaus:

Java:
Button btnAddAttachment = new Button(composite, SWT.NONE);
btnAddAttachment.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
btnAddAttachment.setText("Add Attachment");
            
            btnAddAttachment.addSelectionListener(new SelectionAdapter() {
                  public void widgetSelected(SelectionEvent event) {
                    final Shell shell = new Shell();
                    DirectoryDialog dlg = new DirectoryDialog(shell);
 
                    // Title bar text
                    dlg.setText("Add Attachment");
 
                    // Message displayed in the dialog
                    dlg.setMessage("Select a file");
                    
                    // Set path
                    dlg.setFilterPath("C:/");
 
                    // Calling open() will open and run the dialog.
                    // It will return the selected directory, or
                    // null if user cancels
                    String dir = dlg.open();
                    if (dir != null) {
                     
                    }
                  }
                });
 
du schreibst dir einfach den Listener als eigene Klasse und implementierst in bei den 2 Buttons so hast du den ganzen Listener Code nur einmal

Java:
 btnAddAttachment.addSelectionListener(new deinListener()
 
Zuletzt bearbeitet:
Deine Zeile Code verwirrt mich gerade. Ich hätte es jetzt spontan so geamcht:

Code:
public class DirectoryListener {
	
	public void widgetSelected(SelectionEvent event) {
    	final Shell shell = new Shell();
        DirectoryDialog dlg = new DirectoryDialog(shell);
        
        dlg.setText("Add Attachment");

        dlg.setMessage("Select a file");
        
        dlg.setFilterPath("C:/");

        String dir = dlg.open();
        if (dir != null) {
         
        }
      }

}

button1.widgetSelected();
button2.widgetSelected();
 
so z.b.


Java:
public class DirectoryListener extends SelectionAdapter{

//hier werden dann die Methoden überschrieben
}

oder
Java:
public class DirectoryListener implements SelectionListener{

//hier werden dann die Methoden implementiert 
}

und dann bei deienn Buttons

Java:
 btnAddAttachment.addSelectionListener(new DirectoryListener ()
 
Zuletzt bearbeitet:
so z.b.


Java:
public class DirectoryListener extends SelectionAdapter{

//hier werden dann die Methoden überschrieben
}

oder
Java:
public class DirectoryListener implements SelectionListener{

//hier werden dann die Methoden implementiert 
}

und dann bei deienn Buttons

Java:
 btnAddAttachment.addSelectionListener(new DirectoryListener ()

Ahhh...ja klar, verstehe!!!
Vielen Dank - manchmal kann es so einfach sein :rtfm::rtfm::rtfm:
 
Um das jetzt nochmal kurz weiterzuspinnen - an sich funktioniert alles.
Wenn ich jetzt noch möchte, das die ausgewählte Datei nach betätigen des Buttons "Auswählen" im DirectoryDialog, im Textfeld meiner GUI ist, wie muss ich das dann jetzt machen?

Vielen Dank!
 
Um das jetzt nochmal kurz weiterzuspinnen - an sich funktioniert alles.
Wenn ich jetzt noch möchte, das die ausgewählte Datei nach betätigen des Buttons "Auswählen" im DirectoryDialog, im Textfeld meiner GUI ist, wie muss ich das dann jetzt machen?

Vielen Dank!

Dem Textfield mit txt.setText(...); hinzufügen ? 🙂)

hast du eine konkrete Frage dazu ?

du musst dein Textfeld dazu dann final machen oder als Attribut der Klasse deklarieren, damit du es innerhalb des Listeners benutzen kannst
 
hhhmmmm. Doch etwas tricki wie ich finde :bahnhof:

Wenn ich beispielsweise txtField.setText () setze, welche Angabe kommt dann in der Klammer, wenn ich den ausgewählten Pfad haben will? Der kann ja individuell sein und setPath geht ja auch nicht :rtfm::rtfm::rtfm:

Weiterhin habe ich ja insgesamt 4 solche txtFields - dann wieder vererben?
 
wenn ich das aus der API richtig entnehme sollte ja in

Java:
"String dir = dlg.open();"

dein kompletter Pfad vom Ordner stehen.

Dann musst du einfach txtfield.setText(dir); machen
 
Ja das funktioniert schon. Das Problem ist:

Ich habe zwei Textfelder untereinander, wo man jeweils eine individuelle Datei aus der Directory suchen kann, damit diese später hochgeladen wird.

Mit der von dir beschriebenen Variante wird nur stets das eine Feld ausgefüllt.
 
Hab dir mal schnell nen Beispiel gehackt 😀, wie du die Zuordnung dann machen KÖNNTEST 🙂
ich hoffe, das hilft dir weiter 😀

Java:
list.get(b).setText(b.getText());

in der Zeile musst du dann dein DialogText adden

ps. das is jetzt mit nem ActionListener gemacht, aber sollte mit deinem ähnlich funzen 🙂

Java:
public class Beispiel extends JFrame {
 
    private static final long serialVersionUID = 1L;
    private HashMap<JButton,JTextField> list;
    
   
    public Beispiel() {
    	this.setSize(400,400);
    	this.setLayout(new GridLayout(3,2));
    	list=new HashMap<JButton,JTextField>();
    	for(int i=0;i<3;i++){
    		JButton btn=new JButton("Btn"+i);
    		JTextField text=new JTextField();
    		btn.addActionListener(new MyListener());       	
        	list.put(btn,text);        	
        	this.add(btn);
        	this.add(text);
    	}        
    }
    
    public class MyListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			JButton b=(JButton)arg0.getSource();
			list.get(b).setText(b.getText());
		}
    	
    }
    
    public static void main(String[] args){
    	new Beispiel().setVisible(true);
    }
    
}
 
Zuletzt bearbeitet:

Zurück
Oben