GridbagLayout und meinen Probs der Anzeige

Genbarion

Grünschnabel
möchte einen MultiFileupload zu wege bringen mit Zusatzinfos...

dafür habe ich ein GridbagLayout gewählt. aber ein Problem habe ich ...

nach dem Klick auf den "openButton" öffnet sich der Chooser ,
Dateien auswählen und öffnen... alles OK : einen beliebige Anzahl an Dateien wird ohne weiteres so angezeigt wie ich mir das wünsche.

wenn ich aber erneut den "openButton" drücke und weitere Dateien aus einen Ordner auswählen möchte werden die ersten Dateien und deren Informationen neben das GridBagLayout gesetzt.
ichnutze eien Vector zum Befüllenmit sämlichen Objekten, darauf basierend möchte ich Jedes mal wenn der Öffenknopf vom Chooser gedrückt wird das gesammte Fenstern neu in das GridBagLayout bauen .. mit Hilfe einer For-Schleife.

ich habe schon alles mir gefundene probiert, aber ich bekomm es nicht hin .

die Upload.java hängt dran

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


public class upload extends JFrame
{
	//protected static final LayoutManager  = null;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public upload() 
	{
	    super("File Chooser Test Frame");
	    setBackground(Color.LIGHT_GRAY);
	    setSize(400,200);
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
		final GridBagLayout gbl=new GridBagLayout();
    	final GridBagConstraints gbc = new GridBagConstraints();
    	final JButton openButton = new JButton("Open");
		openButton.setSize(100, 50);
		setLayout(gbl);
		gbc.gridx=0;
		gbc.gridy=0;
		gbc.gridwidth=8;
		gbc.gridheight=1;
		gbc.weightx=50;
	    gbc.weighty=10;
	    gbc.insets=new Insets(4,4,4,4);
	    gbc.anchor=  GridBagConstraints.CENTER;
	    gbc.fill= GridBagConstraints.NONE;
	    gbl.setConstraints(openButton, gbc);
		add(openButton); 
	    final JButton abschicker= new JButton("Abschluss");
	    abschicker.setSize(100, 50);
	    // FileChooser für multiupload
	   openButton.addActionListener(new ActionListener() 
	    {
		    int x=0;
		    boolean head_Flag=true;
		    Vector datensatz=new Vector(64,8);
		    Vector typVector=new Vector(3,1);
		    Vector tablehead=new Vector(8,1);
		    
		    public void actionPerformed(ActionEvent ae) 
		    {		    	
		    	if(typVector.size()==0)
		    	{
					typVector.addElement(new JLabel("exe"));
					typVector.addElement(new JLabel("jpeg"));
					typVector.addElement(new JLabel("gif"));
					typVector.addElement(new JLabel("png"));
					typVector.addElement(new JLabel("txt"));
					typVector.addElement(new JLabel("pdf"));
					typVector.addElement(new JLabel("doc"));
					typVector.addElement(new JLabel("mp3"));
					typVector.addElement(new JLabel("avi"));
		    	}
		    	if(tablehead.size()==0)
		    	{
		    		tablehead.addElement(new JLabel("Dateiname"));
		    		tablehead.addElement(new JLabel("Dateipfad"));
		    		tablehead.addElement(new JLabel("dateiart"));
		    		tablehead.addElement(new JLabel("Bemerkung"));
		    		tablehead.addElement(new JLabel("firma"));
		    		tablehead.addElement(new JLabel("Objekt"));
		    		tablehead.addElement(new JLabel("Ansprechpartner"));
		    		tablehead.addElement(new JLabel("Projekt / Vorgang"));
		    	}		    	
		    	
			    JFileChooser chooser = new JFileChooser();
		        chooser.setMultiSelectionEnabled(true);
		        int option = chooser.showOpenDialog(upload.this);
		        if (option == JFileChooser.APPROVE_OPTION) 
		        {
		        	File [] sf = chooser.getSelectedFiles();
		        	x=x+sf.length;
		        	if (sf.length > 0)
		        	{
		        		if(head_Flag)
		        		{			        		
					        //erstellen des Tabellenkopfes
			        		for (int i =0;i<tablehead.size();i++)
			        		{
			        			gbc.gridx=i;
					        	gbc.gridy=1;
					        	gbc.gridwidth=1;
					        	gbc.gridheight=1;
					        	gbc.ipadx=20;
					        	gbc.ipady=20;
					        	gbc.weightx=100;
					        	gbc.weighty=20;
					        	gbl.setConstraints((JLabel)tablehead.get(i),gbc);
					        	add((JLabel)tablehead.get(i));							
			        		}				       
							head_Flag=false;
		        		}											    		
					    for(int i=0;i<sf.length;i++)
				    	{
					    	//füllen des Vectors mit den DAten vom filechooser und Textfeldern
				    		datensatz.add(new JLabel(""+sf[i].getName()));
					    	datensatz.add(new JLabel(""+sf[i].getPath()));				    		
					    	datensatz.add(new JComboBox(typVector));
			        		datensatz.add(new JTextArea("Bitte hier Ihre Bemerkung eingeben",5,50));
			        		datensatz.add(new JTextField("5",50));		        						  	  	
			        		datensatz.add(new JTextField("6",50));
			        		datensatz.add(new JTextField("7",50));
			        		datensatz.add(new JTextField("8",50));
				    	}
					    
		       			for(int i=0;i<datensatz.size()/8;i++)
		        		{		       							      
		       				//auflisten der Datenaus dem Vector		       				
		       				gbc.gridx=0;
							gbc.gridy=i+2;
							gbc.gridwidth=1;
							gbc.gridheight=1;
							gbc.ipadx=10;
				        	gbc.ipady=10;
				        	gbc.weightx=1;
				        	gbc.weighty=1;
				        	gbl.setConstraints((JLabel)datensatz.get(i*8+0), gbc);
							add((JLabel)datensatz.get(i*8+0));
							gbc.gridx=1;//breite
							gbc.gridy=i+2;//höhe
							gbc.gridwidth=1;
							gbc.gridheight=1;
							gbc.ipadx=10;
				        	gbc.ipady=10;
				        	gbc.weightx=0.5;
				        	gbc.weighty=1;	
				        	gbl.setConstraints((JLabel)datensatz.get(i*8+1),gbc);
				        	add((JLabel)datensatz.get(i*8+1));							
							gbc.gridx=3;
							gbc.gridy=i+2;
							gbc.gridwidth=1;
							gbc.gridheight=1;
							gbc.ipadx=10;
							gbc.ipady=10;
							gbc.weightx=1;
							gbc.weighty=1;
							gbl.setConstraints((JTextArea)datensatz.get(i*8+3), gbc);
							add((JTextArea)datensatz.get(i*8+3));
							gbc.gridx=4;
							gbc.gridy=i+2;
							gbc.gridwidth=1;
							gbc.gridheight=1;
							gbc.ipadx=10;
							gbc.ipady=10;
							gbc.weightx=1;
							gbc.weighty=1;
							gbl.setConstraints((JTextField)datensatz.get(i*8+4), gbc);
							add((JTextField)datensatz.get(i*8+4));							
		       				gbc.gridx=5;
		        			gbc.gridy=i+2;
		        			gbc.gridwidth=1;
		        			gbc.gridheight=1;
		        			gbc.weightx=1.0;
		        			gbc.weighty=1.0;
		        			gbc.fill=GridBagConstraints.NONE;
		        			gbl.setConstraints((JTextField)datensatz.get(i*8+5), gbc);
		        			add((JTextField)datensatz.get(i*8+5));
		        			gbc.gridx=6;
		        			gbc.gridy=i+2;
		        			gbc.gridwidth=1;
		        			gbc.gridheight=1;
		        			gbc.weightx=1.0;
		        			gbc.weighty=1.0;
		        			gbc.fill=GridBagConstraints.NONE;
		        			gbl.setConstraints((JTextField)datensatz.get(i*8+6), gbc);
		        			add((JTextField)datensatz.get(i*8+6));
		        			gbc.gridx=7;
		        			gbc.gridy=i+2;
		        			gbc.gridwidth=1;
		        			gbc.gridheight=1;
		        			gbc.weightx=1.0;
		        			gbc.weighty=1.0;
		        			gbc.fill=GridBagConstraints.NONE;
		        			gbl.setConstraints((JTextField)datensatz.get(i*8+7), gbc);
		        			add((JTextField)datensatz.get(i*8+7));						        
		        			pack();
			        	}
		        	}
		        }	        		
		        
		        setSize(1200,170+(x*30));
		    }		        	         		    		        
	    }							);
	   
	    abschicker.addActionListener(new ActionListener()
	    {
	    	public void actionPerformed(ActionEvent ae)
	    	{
	    		// hier kommt der Cast der Uploaddaten hin zu PhP
	    		System.out.println("hier gehts dann zu PhP rüber");
	    	}
	    }
	    );
	}

	  public static void main(String args[]) {
	    upload sfc = new upload();
	    sfc.setVisible(true);
	  }
	}


Bitte um hilfe mit freundlichen Grüßen
Genbarion


PS:habe einen weiter versiondie Läuft sich aber aus 4 verschienenen Layouts zusammen baut ... aber t.. musste ich verwerfen weil ich die daten nicht merh rausbekommen habe... Keiner der JLanel usw. aht einen namen.. nu sammel ich halt alls aus Vectoren raus...
 
Zuletzt bearbeitet von einem Moderator:
die Idee klingt gut ... aber wie ist da mit Objekte einzuarbeiten wie JTextArea , oder JCombobox. Mehrere Davon möchte ich nutzen... bekomm ichdie ohne weiteres unter ?
 
Danke dir ich werde mal sehen was sich damit machen lässt, wenn es nicht passen sollte dann werde ich noch mal hier sein ...

aber rein von der neugierde ... das was ich da gemacht habe muss doch auch funtzen ... wo ist da mein Denkfehler ?
 
So genau hab ich mir das jetzt nicht angeschaut, da man für sowas eigentlich ne JTable verwendet.

Gruß

Sascha
 
Dein Denkfehler ist ganz einfach. Beim ersten Mal werden die Textfelder etc hinzugefügt und das sieht dann alles ok aus. Bei dem zweiten Mal werden aber nicht die alten Textfelder ersetzt, sondern es kommen neue hinzu und das scheint dann deine Darstellung völlig auseinander zu reißen. Wenn du das so machen möchtest, dann solltest du die "alten" Textfelder löschen bevor du die neuen einfügst. Allerdings sollte man versuchen das zu vermeiden, denn das Erzeugen von grafischen Elementen, besonders bei Swing, kostet enorm viel Rechenleistung und kann auch den RAM gut stopfen. Eine Alternative wie z.B. eine JTable wäre dann wohl eher angesagt.
 
das wäre dann der invalidate() vom GridBagLayout gbl bevor ich das erneut aufbaue.... oder?
oder muss ich auch die Constraints zurücksetzen ?
 
Zurück