ArrayList in 2D Array umfüllen

mavinatic

Bekanntes Mitglied
Hallo Ihrs, ich bin neu hier im Forum, weil ich eure Hilfe brauche^^ 😛

Ich bin dabei ein Email Client zu programmieren, nun lese ich die Mails von dem Server und speichere sie in einer ArrayList<Mail>. Um die nun mit Java-Swing sichtbar zumachen wollte ich..."Betreff","Absender" & "SendeDatum" in dieser Tabelle anzeigen lassen.

Meine JTable besteht aus einmal dem Array > String[] columns = {Subject....} usw. und das 2. Array muss mit den Daten befüllt werden nämlich das String[][] rowData - Array.
Ich sitze schon Tage daran von der ArrayList<Mail> mit den methoden das in das 2D Array zu verfrachten, scheitere aber immer wieder daran, deshalb bitte ich euch um hilfe 🙂

GetMail.java:
Java:
package Data;

import java.util.ArrayList;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.ContentType;

public class GetMail 
{	
	public void GetMail(final Properties props) throws Exception
	{
		Session session = Session.getInstance( props, new javax.mail.Authenticator() 
		{ 
	          @Override protected PasswordAuthentication getPasswordAuthentication() 
	          { 
	            return new PasswordAuthentication( props.getProperty( "mail.pop3.user" ), props.getProperty( "mail.pop3.password" ) ); 
	          } 
	     } ); 
		
		Store store = session.getStore("pop3");
		store.connect();
		
		session.setDebug(true);
		
		Folder folder = store.getFolder("INBOX");
		folder.open( Folder.READ_ONLY );
		
		Message message[] = folder.getMessages();
		
		ArrayList<Mail> arrList = new ArrayList<Mail>();
		Mail me = null;
		
		
		for (int i=0; i<message.length; i++)
		{
			Message m = message[i];
			
			me = new Mail();
			me.setSubject(m.getSubject());
			me.setFrom(m.getFrom().toString());
			me.setDate(m.getSentDate().toString());			
			
			arrList.add(me);
		}
		
		
		
		for (int j=0; j<=arrList.size(); j++)
		{
                          //Hier String[][]rowData einfügen...

			System.out.println(arrList.get(j).getSubject() + " " + arrList.get(j).getFrom() + " " + arrList.get(j).getDate());

		}
		
		
		folder.close(false);
		store.close();
		
		
	}
		
}
 
Grundsätzlich in etwa wie folgt. Wenn Du das aber nur wegen der JTable machst, solltest Du Dir vielleicht überlegen ein eigenes TableModel zu schreiben, welches mit der ArrayList umgehen kann.
Java:
String[][] data = new String[arrList.size()][];
for (int i=0; i<arrList.size(); i++) {
    Mail mail = arrList.get(i);
    data[i] = {mail.getSubject(), mail.getFrom(), mail.getDate()};
}
 
Danke für die schnelle Antwort, auf die Lösung des Arrays bin ich auch schon gekommen, ABER!! 😀 dann kommt bei mir in eclipse eine Fehlermeldung nämlich folgende:

"Array constants can only be used in initializers"

Was bedeutet das und wie behebe ich das Problem?

Danke im Vorraus
 
Java:
package Data;

import java.util.ArrayList;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.ContentType;

public class GetMail 
{	
	public void GetMail(final Properties props) throws Exception
	{
		Session session = Session.getInstance( props, new javax.mail.Authenticator() 
		{ 
	          @Override protected PasswordAuthentication getPasswordAuthentication() 
	          { 
	            return new PasswordAuthentication( props.getProperty( "mail.pop3.user" ), props.getProperty( "mail.pop3.password" ) ); 
	          } 
	     } ); 
		
		Store store = session.getStore("pop3");
		store.connect();
		
		session.setDebug(true);
		
		Folder folder = store.getFolder("INBOX");
		folder.open( Folder.READ_ONLY );
		
		Message message[] = folder.getMessages();
		
		ArrayList<Mail> arrList = new ArrayList<Mail>();
		Mail me = null;
		
		
		for (int i=0; i<message.length; i++)
		{
			Message m = message[i];
			
			me = new Mail();
			me.setSubject(m.getSubject());
			me.setFrom(m.getFrom().toString());
			me.setDate(m.getSentDate().toString());			
			
			arrList.add(me);
		}
		
		
		String[][] data = new String[arrList.size()][];
		for (int i=0; i<arrList.size(); i++) 
		{
		    Mail mail = arrList.get(i);
		    data[i] = {mail.getSubject(), mail.getFrom(), mail.getDate()};
		}
		
		
		folder.close(false);
		store.close();
		
		
	}
		
}

das kommt bei deinen Array "einfüllen" mit daten, den teil den ich eingefügt habe...den du mir da oben reingeschrieben hast...
 
Zuletzt bearbeitet:
Sorry, hatte das vorhin hier (unkontrolliert) reingepostet. Der Code muss natürlich so lauten
Java:
data[i] = new String[] {mail.getSubject(), mail.getFrom(), mail.getDate()};
 
Kannst du mir jetzt mal zeigen wie ich jetzt die einzelnen "Teile"(Subject,From,Date) abrufe aus dem array!?

Wenn ich nämlich System.out.println(data); dann kommen ja nur die Objecte... :O
 
Wenn ich nämlich System.out.println(data); dann kommen ja nur die Objecte... :O

Da steckt ja schliesslich auch ein String Array drin ;-)
An die einzelnen Elemente kommt man z.B. mit Schleife in Schleife:
Java:
for (int i=0;i<data.length; i++)
	for (int k=0; k<data[i].length; k++)
		System.out.println(data[i][k]);
Wenn's nur um eine Kontrollausgabe auf der Konsole geht, könnte man das so machen:
Java:
for (int i=0;i<data.length; i++)
	System.out.println(java.util.Arrays.toString(data[i]));
 
Hey, ich habe ein Problem, nämlich...ich übergebe ein 2D-Array in mein "Content-Panel". ich hab mit dem DebugMode geguckt ob die Daten übergeben werden und ein wunder Ja sie sind in dem Array :O ich finde den fehler einfach nicht

Main
Java:
package GraphicUserInterface;

import java.awt.BorderLayout;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;

import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import Data.PlugInManager;
import GraphicUserInterface.Content.Content;
import GraphicUserInterface.Control.Control;

public class Main extends JFrame {
	String[][] rowData = null;
	
	public Main() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, MalformedURLException, FileNotFoundException
	{
		UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		
		setPreferences();
		mainPanel();
		setVisible(true);
	}
	
	public void mainPanel() throws MalformedURLException, FileNotFoundException, InstantiationException, IllegalAccessException, ClassNotFoundException
	{
		PlugInManager p = new PlugInManager();
		rowData = p.convertToStringArray(p.loadPlugin(p.scanConfigFile(p.scanPlugInDirectory())));
		
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		
		Content content = new Content();
			content.setRowData(rowData);
			add("Center", content);
			
			
		Control control = new Control();
			control.setContent(content);
			add("South", control);
	}
	
	public void setPreferences()
	{
		setSize(400,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setTitle("PlugInManager_TESTGUI");
		setResizable(false);
	}
	
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, MalformedURLException, FileNotFoundException {
		Main m = new Main();
	}
}

PluginManager
Java:
package Data;
import java.io.File;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Scanner;




public class PlugInManager {
	String[] pluginDirectory = null;
	String line = null;
	PlugIn app = null;
	String[][] rowData = null;
	String load = null;
	
	public String[] scanPlugInDirectory()
	{
		File f = new File("src/plugins/");
		File[] fList = f.listFiles();
		
		pluginDirectory = new String[fList.length];
		
		for(int i=0; i<fList.length; i++)
		{
			pluginDirectory[i] = fList[i].toString().substring(12);
			//System.out.println(pluginDirectory[i]);
		}
		
		return pluginDirectory;
	}
	
	public ArrayList<PlugIn> scanConfigFile(String[] pluginDirectory) throws FileNotFoundException
	{
		ArrayList<PlugIn> pluginList = new ArrayList<PlugIn>();
		for (int i=0; i<pluginDirectory.length; i++)
		{
			Scanner scn = new Scanner(new File("src/plugins/"+pluginDirectory[i]+"/"+"plugin.ini"));
			app = new PlugIn();
			
			while(scn.hasNext())
			{
				line=scn.nextLine();
				
				if(line.contains("name="))
				{
					app.setPlugin_Name(line.substring(5));
				}
				if(line.contains("runFile="))
				{
					app.setPlugin_RunFile(line.substring(8));
				}
				if(line.contains("image="))
				{
					app.setPlugin_ImagePath(line.substring(6));
				}
				
				app.setPlugin_dirName(pluginDirectory[i]);
			}
			
			if(app.getPlugin_Name()!=null & app.getPlugin_RunFile()!= null & app.getPlugin_ImagePath()!= null)
			{
				pluginList.add(app);
			}
		}
		
		return pluginList;
		
	}
	
	@SuppressWarnings("deprecation")
	public ArrayList<PlugIn> loadPlugin(ArrayList<PlugIn> pluginList) throws InstantiationException, IllegalAccessException, ClassNotFoundException, MalformedURLException
	{
		for(int i=0; i<pluginList.size(); i++)
		{
			File file = new File("src/plugins/"+pluginList.get(i).getPlugin_dirName()+"/"+pluginList.get(i).getPlugin_RunFile());
			ClassLoader fileLoader = URLClassLoader.newInstance(new URL[] {file.toURL()});
			PlugIns filePlugIn = (PlugIns) fileLoader.loadClass("plugins."+pluginList.get(i).getPlugin_dirName()+"."+pluginList.get(i).getPlugin_RunFile().toString().substring(0, pluginList.get(i).getPlugin_RunFile().toString().length()-5)).newInstance();
			
			pluginList.get(i).setPlugin_clsLoader(filePlugIn);
			pluginList.get(i).setPlugin_status(true);
		}
		
		return pluginList;
	}
	
	public String[][] convertToStringArray(ArrayList<PlugIn> pluginList)
	{
		rowData = new String[pluginList.size()][];
		for(int i=0; i<pluginList.size(); i++)
		{
			PlugIn plugin = pluginList.get(i);
			rowData[i] = new String[] { plugin.getPlugin_Name(), pluginList.get(i).getPlugin_RunFile(), checkPluginStatus(pluginList.get(i).getPlugin_status())};			
		}
		
		return rowData;
	}
	public String checkPluginStatus(boolean plugin_status)
	{
		if(plugin_status)
		{
			load = "plugin loaded";
		}
		else
		{
			load = "plugin unloaded";
		}
		return load;
	}
}

/* 1. Scannen der Ordner
 * 2. Scannen der einzelnen Plugin.ini Datei
 * 3. Objekt festlegen mit Atrributen 
 */

ContentPanel
Java:
package GraphicUserInterface.Content;

import java.awt.GridLayout;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Content extends JPanel {
	DefaultTableModel model = null;
	JTable table = null;
	String[] colhead = { "plugin_name", "plugin_runfile", "plugin_status" };
	String[][] rowData = null;
	
	public Content()
	{
		GridLayout gLayout = new GridLayout(1,1);
		setLayout(gLayout);
		
		model = new DefaultTableModel(rowData, colhead);
		table = new JTable(model);
		JScrollPane scrollPane = new JScrollPane(table);
		
		add(scrollPane);
	}

	public void setRowData(String[][] rowData) {
		this.rowData = rowData;
		for (int i=0; i<rowData.length; i++)
		{
			for(int j=0;j<rowData[i].length;j++)
			{
				System.out.println(rowData[i][j]);
			}
		}
	}
}

Wäre cool wenn ihr mir mal auf die Sprünge helfen könntet, hab ich irgendetwas übersehen?
 
Du musst die Daten natürlich noch dem Tabellenmodell übergeben: [java=28] public void setRowData(String[][] rowData) {
this.rowData = rowData;
this.model.setDataVector(rowData, colHead);
for (int i=0; i<rowData.length; i++)
{
for(int j=0;j<rowData.length;j++)
{
System.out.println(rowData[j]);
}
}
}[/code]
[size=-1]Ungetestet und im Browser getippt…[/size]

Ebenius
 

Neue Themen


Zurück
Oben