# Button und Vererbung von diesem



## sauerpeter (23. Jul 2012)

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:


```
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) {
                     
                    }
                  }
                });
```


----------



## pl4gu33 (23. Jul 2012)

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


```
btnAddAttachment.addSelectionListener(new deinListener()
```


----------



## sauerpeter (23. Jul 2012)

Deine Zeile Code verwirrt mich gerade. Ich hätte es jetzt spontan so geamcht:


```
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();
```


----------



## pl4gu33 (23. Jul 2012)

so z.b.



```
public class DirectoryListener extends SelectionAdapter{

//hier werden dann die Methoden überschrieben
}
```

oder

```
public class DirectoryListener implements SelectionListener{

//hier werden dann die Methoden implementiert 
}
```

und dann bei deienn Buttons


```
btnAddAttachment.addSelectionListener(new DirectoryListener ()
```


----------



## sauerpeter (23. Jul 2012)

pl4gu33 hat gesagt.:


> so z.b.
> 
> 
> 
> ...



Ahhh...ja klar, verstehe!!!
Vielen Dank - manchmal kann es so einfach sein :rtfm::rtfm::rtfm:


----------



## sauerpeter (24. Jul 2012)

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!


----------



## sauerpeter (24. Jul 2012)

keiner eine Idee? :bahnhof:


----------



## pl4gu33 (24. Jul 2012)

sauerpeter hat gesagt.:


> 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


----------



## sauerpeter (25. Jul 2012)

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?


----------



## sauerpeter (25. Jul 2012)

Kommt dann in der Klammer sowas wie txtField.getSelection()?


----------



## pl4gu33 (25. Jul 2012)

wenn ich das aus der API richtig entnehme sollte ja in


```
"String dir = dlg.open();"
```

dein kompletter Pfad vom Ordner stehen. 

Dann musst du einfach txtfield.setText(dir); machen


----------



## sauerpeter (26. Jul 2012)

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.


----------



## pl4gu33 (26. Jul 2012)

und jedes Feld hat einen eigenen Button? ... dann musst du schauen, welcher Button gedrückt wurde und dann das Feld dazu befüllen


----------



## sauerpeter (26. Jul 2012)

Genau, jedes Feld hat einen eigenen Button.


----------



## pl4gu33 (26. Jul 2012)

Hab dir mal schnell nen Beispiel gehackt , wie du die Zuordnung dann machen KÖNNTEST 
ich hoffe, das hilft dir weiter 


```
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 


```
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);
    }
    
}
```


----------

