Methoden JTable + 2 For-Schleifen

Fesker

Mitglied
Grüße, ich habe gerade ein kleines Verständnisproblem,
ich möchte einfach nur eine Tabelle füllen, mit den, wie sagt man - Inkrementwerten?
Also die Anzahl der Schleifendurchläufe, sodass dann etwas wie ... entsteht...
Java:
[0][1][2][3]
[4][5][6][7]
usw...


bei meiner Formel unten passiert aber was anderes.. :autsch:
Java:
[5][10][15][20]
[5][10][15][20]

Dachte einfach, ich kann den x mit dem y wert der schleifendurchläufe addieren... hab schon tausend andere varianten versucht, aber ich komm einfach nicht drauf, kann mir da mal jemand auf die Sprünge helfen? Fange grad an, an mir zu zweifeln.. :)

Danke im Voraus.

Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTable;


public class MainWindow extends JFrame {

	private JPanel contentPane;
	private JTable table;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MainWindow frame = new MainWindow();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	
	public MainWindow() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		DefaultTableModel model = new DefaultTableModel();
		table = new JTable(model);
		contentPane.add(table, BorderLayout.CENTER);
		
		Vector empty = new Vector();
		empty.add("");
		
		int zaehler=0;
				
		for (int y=0;y<10;y++){
			model.addColumn(empty);
			
			for (int x=0;x<5;x++){
				
				model.addRow(empty);
				model.setValueAt(zaehler, x, y);
                      zaehler+=1;
			}
		}
		
	}

}
 

Fesker

Mitglied
Huhu, ich bins noch mal...

Java:
 int zaehler=0;
                   
            for (int y=0;y<5;y++){ //Spalte
                model.addColumn(empty);
               
                for (int x=0;x<5;x++){
                	zaehler+=1;
                    System.out.println(x+","+y+","+zaehler); // Kontrolle.....
                    model.addRow(empty);
                    model.setValueAt(zaehler, x, y);
                }}

ich bin mir ziemlich sicher, dass dieser Code mich normalerweise bei einem 2DArray zum Erfolg führen würde.
Aber mit der JTabelle scheints nicht zu klappen, soll das so sein? :popcorn:
Gibts da irgendeinen Trick?
 
Zuletzt bearbeitet:

turtle

Top Contributor
Du hast falsche Vorstellungen vom TableModel einer JTable.

Praktisch alle Swing-Komponenten laden/speichern die Daten, die angezeigt werden, in einem entsprechenden Model.

Bei JTable ist das nicht anders. Hier heisst das Model TableModel und du benutzt ein fertige Implemtierung davon nämlich DefaultTableModel. Leider verwendet DefaultTableModel Vector als Speicher und macht es aus meiner Sicht schwieriger zu erkennen, was notwendig ist, damit die JTabel "gut" aussieht.

Ich fange immer bei JTable an und schreibe mir mein eigenes Model. Ich habe dein Problem mal umgeschrieben. Ich hoffe du erkennst es wieder;)
Java:
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Sample extends JPanel {
	private final JTable table;

	public Sample() {
		MeinModel model = new MeinModel(4);
		table = new JTable(model);
		add(new JScrollPane(table), BorderLayout.CENTER);
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame("Table");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new Sample());
		frame.pack();
		frame.setVisible(true);

	}
}

class MeinModel extends AbstractTableModel {
	private final List<String> columns;
	private final List<List<String>> rows;

	public MeinModel(int anzahl) {
		columns = new ArrayList<>();
		for (int i = 0; i < anzahl; i++) {
			columns.add("Spalte " + i);
		}
		rows = new ArrayList<>();
		for (int zeile = 0; zeile < 10; zeile++) {
			List<String> oneRow = new ArrayList<>();
			for (int i = 0; i < anzahl; i++) {
				int zelle = i + 4 * zeile;
				oneRow.add("" + zelle);
			}
			rows.add(oneRow);
		}
	}

	@Override
	public int getRowCount() {
		return rows.size();
	}

	@Override
	public int getColumnCount() {
		return columns.size();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return rows.get(rowIndex).get(columnIndex);
	}
}
 

Anhänge

  • table.png
    table.png
    32,9 KB · Aufrufe: 30
Zuletzt bearbeitet:

Fesker

Mitglied
Puh... ich versuch das jetzt schon den halben Tag zu kapieren..

Das Problem ist, in dem Modell sind die Zeilen und Spalten doch schon schon vordefiniert.
Habs nochmal etwas abgewandelt, damit ich Zeilen und Spalten extern gleich mit angeben kann.
Ich möchte die nun aber von außen ändern können. also bspw. per ButtonClick.

Nun habe ich versucht mir eine AddRow Funktion zu basteln.
Dazu einen kurzen Listeneintrag zur Kontrolle, ob der RowCount sich auch erhöht... ist wohl auch so..
Ich habe mich dann weiterbelesen, und es stand, dass das Model eine "fireSonstwas" Rückmeldung geben muss, damit die JTable sich aktualisiert.

So tat ich, und siehe da: Ein Error, der besagt, dass die getValue-Funktion unten einen IndexOutOfBound-Error liefert,
Code:
Index: 1, Size: 1
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
Nur rufe ich diese doch gar nicht auf?! Wo liegt das Problem?

Gibt es denn noch andere Table-Alternativen?
Die Dinger, die man in Delphi immer so praktisch einfügen konnte, hatten alle schon 65500 Zeilen und Spalten vorgefertigt, da brauchte man sich nicht den Kopf zerbrechen. Die C++ Dinger sind da ähnlich gestrickt... kann doch nicht so schwer sein...

Java:
class SystemMapModel extends AbstractTableModel {
    private final List<String> columns;
    private final List<List<String>> rows;
    private DefaultListModel planetList = MainWindow.planetListModel;
 
    public SystemMapModel(int colCount, int rowCount) {
        columns = new ArrayList<>();
        for (int i = 0; i < colCount; i++) {
            columns.add("Spalte " + i);
        }
        rows = new ArrayList<>();
        for (int zeile = 0; zeile < rowCount; zeile++) {
            List<String> oneRow = new ArrayList<>();
            
            for (int i = 0; i < colCount; i++) {
                int zelle = i + colCount * zeile;
                oneRow.add("" + zelle);
            }
            rows.add(oneRow);
        }
    }
    
    // Meine Kreation
    public void addRow(){
    	List<String> emptyRow = new ArrayList<>();
    	emptyRow.add("");
    	rows.add(emptyRow);
    	planetList.add(0, "klappt" +rows.size());
    	fireTableDataChanged();

    }

@Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return rows.get(rowIndex).get(columnIndex);
    }

Der Hintergrund ist doch auch nur ganz banal; es werden "Sonnensysteme" generiert, jedes mit eigener X- und Y- Koordinate, sodass ich diese hinterher in der JTable anklicken kann und sich dann ein Detailfenster mit weiteren Infos öffnet..

zur Zeit ist das einfach über ein ListModel gelöst, aber bei etwa 500 Systemen, kackt das ListModel ab, also brauch ich etwas anderes und sowieso übersichtlicheres ..

Grüße.
 

turtle

Top Contributor
getValue-Funktion unten einen IndexOutOfBound-Error liefert

Nein, du rufst die Funktion nicht auf, aber es wird automatisch aufgerufen, wenn die JTable sich zeichnen möchte. Daher ruft es getRowCount und die anderen Methoden, die im TableModel definiert sind.

Daher ist es ein gutes Model auch so wichtig für das Zusammenspiel mit einer JTable. Und dein Model scheint da Probleme zu machen.

Das Problem ist, in dem Modell sind die Zeilen und Spalten doch schon schon vordefiniert.
Ja, genau. Und wenn das zu deiner Applikation nicht passt, ändere es doch einfach. Zeilen sind allerdings NICHT vordefiniert, sondern das Model bietet Methoden an, das die JTable anfragen kann, den Wert für eine bestimmte Zeile/Spalte zu erhalten. Dieses "malt" dann die JTable. Daher sind in meinem Beispiel Spalten und Zeilen auch List<XXX>, damit es einfach ist, deren Inhalt anzupassen.

Von dem was du schreibst, würde ich ein PlanetenModel schreiben, in der jede Zeile in der Tabelle einen Planeten darstellen kann. Im Model würden Spalten für Name, x, y, Gewicht und anderes definiert sein. Dieses wären auch Attribute eines Planeten. In meinem Beispiel hatte ich nur einen String im Model drin. Dieses macht bei dir wohl keinen Sinn.

Wenn du per Programm Änderungen am Model vornimmst, beispielsweise Zeile hinzufügst, musst du die natürlich dem Model hinzufügen; war in meinem Beispiel einfach, weil nur ein String vorkommen kann im Model (rows.add(oneRow)). Bei dir also wohl rows.add(neuerPlanet). Danach musst du alle Listener, beispielsweise deine JTable, informieren, das sich das Model geändert hat, damit neu gezeichnet werden kann.

Dieses würde ich aber erst machen, NACHDEM ein PlanetenModel geschrieben und mit Testdaten verifiziert worden ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
M Zelle von JTable mit Rahmen versehen Java Basics - Anfänger-Themen 4
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G JTable: mehrzeilige Zellen erstellen Java Basics - Anfänger-Themen 2
W Problem JTable Java Basics - Anfänger-Themen 5
M JTable wird nicht aktualisiert Java Basics - Anfänger-Themen 4
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
S Warum wird JTable nicht angezeigt Java Basics - Anfänger-Themen 2
D jtable renderer und sortieren kombinieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben