Integer-Array in Tabelle übergeben

T

thebigN

Guten Abend,

ich habe ein zweidimensionales Integer-Array, welches ich in eine Tabelle einfügen möchte. Daran bin ich bis jetzt allerdings gescheitert =(

Hat einer von euch eine Idee, wie ich die Werte in die Tabelle bekomme?

Code:
public class Main 
{
	
public static void main(String[] args)
{
	int m[][] = new int [3][8];		//Ausgangsmatrix
	int e[][] = new int [8][8];		//Ergebnismatrix
	int s = 0;						//Summe
	
	
	
	m[0][0] = 3;
	m[0][1] = 3;
	m[0][2] = 2;
	m[0][3] = 1;
	m[0][4] = 4;
	m[0][5] = 5;
	m[0][6] = 4;
	m[0][7] = 1;
	
	m[1][0] = 1;
	m[1][1] = 1;
	m[1][2] = 1;
	m[1][3] = 5;
	m[1][4] = 3;
	m[1][5] = 5;
	m[1][6] = 5;
	m[1][7] = 5;
	
	m[2][0] = 2;
	m[2][1] = 2;
	m[2][2] = 1;
	m[2][3] = 1;
	m[2][4] = 4;
	m[2][5] = 5; 
	m[2][6] = 5;
	m[2][7] = 1;
	

	//Ausgangsmatrix:
	for (int i = 0; i < m.length; i++)				
	{
		for (int j = 0; j < m[0].length; j++)
		{
			System.out.print(m[i][j] + "  ");
		}
		System.out.print("\n");
	}
	
	
		
	//Differenz: 
	for (int x = 0; x < 8; x++)
	{
		for (int k = 1; k < 8; k++)
		{	
			for (int j = 0; j < 3; j++)
			{
				s = Math.abs(m[j][x] - m[j][k]) + s;    
			}
			//System.out.print("\n");
			if(x < k) e[x][k] = s;			//mit dem if: Dreiecksmatrix, untere Ecke fehlt, weil doppelt
			s = 0;
		}
	}
	
	System.out.println("\n\n");
	
	
	//Ergebnis:
	for (int i = 0; i < 8; i++)				
	{
		for (int j = 0; j < 8; j++)
		{
			System.out.print(e[i][j] + "\t");
		}
		System.out.print("\n");
	}
}

Das ist das Array, welches ich einfügen will.
 
Die Ergebnismatrix, also e[][], will ich eine Tabelle einfügen.

e[][] =
0 0 2 7 5 9 8 7
0 0 2 7 5 9 8 7
0 0 0 5 7 11 10 5
0 0 0 0 8 8 7 0
0 0 0 0 0 4 3 8
0 0 0 0 0 0 1 8
0 0 0 0 0 0 0 7
0 0 0 0 0 0 0 0


Das soll dann ungefähr so aussehen:

123.png
 
Du hast ja noch überhaupt keine grafische Oberfläche :suspekt:

Stichwort zB. Swing. JFrame, JPanel, JButton, JTextField...JTable...
Da wirds ein paar Übungsprogramme zum Beibringen brauchen.
Tutorials/Onlinebücher etc. gibts genug.
 
Die habe ich schon =)

Die Tabelle hab ich so gemacht:
Code:
	//TableModel 
    final Model model = new Model();
    
    // Das JTable initialisieren
    JTable table = new JTable( model );
    
    JFrame frame = new JFrame("Differenz");
    
    Container content = frame.getContentPane();
    content.add( new JScrollPane( table ), BorderLayout.CENTER );
    
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();
    frame.setVisible(true);


Code:
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;


class Model implements TableModel 
{
    public int getColumnCount() 					//Anzahl der Spalten
    {
        return 9;
    }
    
    public String getColumnName(int columnIndex)	//Namen der Spalten
    {
    	switch(columnIndex)
    	{
    		case 0: return "   ";
    		case 1: return "Element1";
    		case 2: return "Element2";
    		case 3: return "Element3";
    		case 4: return "Element4";
    		case 5: return "Element5";
    		case 6: return "Element6";
    		case 7: return "Element7";
    		case 8: return "Element8";
    		default: return null;
    	}
    }
    
    
    public int getRowCount() 						//Anzahl der Spalten
    {
        return 9;
    }
    
    
 	
    public Class getColumnClass(int columnIndex) 	//Typ von den Objekten in den Zeilen 
    {	
        switch( columnIndex )
        {
            case 0: return String.class;
            case 1: return Integer.class;
            case 2: return Integer.class;
            case 3: return Integer.class; 
            case 4: return Integer.class;
            case 5: return Integer.class;
            case 6: return Integer.class;
            case 7: return Integer.class;
            case 8: return Integer.class;
            default: return null;
        }   
    }
    
    
    
 // Der Wert der Zelle (rowIndex, columnIndex)
    public Object getValueAt(int rowIndex, int columnIndex) 
    {   
        switch(columnIndex)
        {
            case 0: return new String ("Element1");
            case 1: return new Integer (5);
            case 2: return new Integer (6);
            case 3: return new Integer (7); 
            case 4: return new Integer (8); 
            case 5: return new Integer (9); 
            case 6: return new Integer (10); 
            case 7: return new Integer (11); 
            case 8: return new Integer (12); 
            default: return null;
        }
    }



	@Override
	public void addTableModelListener(TableModelListener l) {
		// TODO Auto-generated method stub
		
	}



	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) 
	{
		return false;
	}



	@Override
	public void removeTableModelListener(TableModelListener l) 
	{
		// TODO Auto-generated method stub
	}



	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) 
	{
		// TODO Auto-generated method stub
	}
}


Jetzt versuche ich, die Werte die z.Z. in der Tabelle sind, durch die zu ersetzen, die ich darein haben will.
Ich hab schon mehrere Sachen versucht, die ich im Internet gefunden habe. Es hat aber noch nicht funktioniert, dass die Matrix übergeben wird =(
 
Zum Code 1:
Hat es einen Grund, warum das Model als final gekennzeichnet ist?

Ich nehm mal an, dass du zu dem Zeitpunkt das Ergebnis schon hast, also als int[][]
Dann muss man nur das Model so anpassen, dass es eben ein zweidim. Array repräsentiert.
Angefange damit, dass du die Arrayvariable beim new Model() in den Klammern übergibst
(einen passenden Konstruktor macht man dann beim Code 2).

Code 2:
Als Erstes braucht die Klasse also einen Konstruktor, der ein Array nimmt,
und eine Variable, um dieses für später zwischenzuspeichern.
Java:
int[][] arr;

public Model(int[][] arr) {
    this.arr = arr;
}

Weitere Annahme: Die Tabelle soll das Ergebnis nur anzeige, und nicht änderbar sein.

Weiter gehts mit getRowCount und getColumnCount.
arr ist ja ein Array aus allen Zeilen,
und jede Zeile arr[irgendwas] ist ein Array der einzelnen Spalten drin.
Bei getRowCount muss man also nur die Länge des Arrays arr zurückgeben.
Java:
return arr.length;
Bei den Spalten ist es etwas umständlicher.
Jede Zeile bei dir ja gleich viel Spalten, also könnte man theoretisch
einfach die Spaltenanzahl der ersten Zeile zurückgeben:
Java:
return arr[0].length;
Problem dabei ist, wenn das Array überhaupt keine Zeilen hat -> Exception.
Also zuerst noch ein if, ob es >0 Zeilen gibt, wenn nicht, dann 0 Spalten zurückgeben.
Dann ist die Anzahl sowieso egal.

getColumnName braucht man nicht unbedingt, kann man auch komplett löschen.

Bei getColumnClass kannst du immer Integer.class zurükgeben, statt dem ganzen switch.
Sind ja alles nur int´s.

Und bei getValueAt reicht ein einfaches
Java:
return new Integer(arr[rowIndex][columnIndex]);

Die Funktionen weiter unten können fast alle weg, nur isCellEditable nicht.
Das muss auch nicht mehr verändert werden.
 
Zurück