Swing Tabellen updaten

R

Rabababär

Gast
Hallo Leute,
Ich wollte eine Swing GUI mit einer Tabelle erstellen aber leider scheitere ich daran die Tabelle ordentlich zu aktualisieren.

Folgendes habe ich versucht:
Ich habe eine Klasse, in der sich zwei Tabellen befinden. In dieser Klasse habe ich eine Methode, welche verschiedene Werte der beiden Tabellen manipuliert. Diese Methode schließt mit zwei TableModelEvents ab:
Java:
TableModelEvent north_event = new TableModelEvent(table_model,TableModelEvent.ALL_COLUMNS,TableModelEvent.UPDATE);
TableModelEvent south_event = new TableModelEvent(table1_model,TableModelEvent.ALL_COLUMNS,TableModelEvent.UPDATE);

Daraufhin wird von den beiden TableModels ausgehend munter drauf los gefeuert und eine andere Klasse, die das ganze beobachtet, benachrichtigt:
Java:
table_model.fireTableChanged(north_event);
table1_model.fireTableChanged(south_event);

Nun wird die Methode "tableChanged" der anderen Klasse, welche TableModelListener implementiert, aktiviert. In dieser versuche ich nun mit fireTableChanged die Visualisierung zu aktualsieren:
Java:
AbstractTableModel model = (AbstractTableModel) e.getSource();
model.fireTableChanged(e);

Genau hier scheint nun aber der Hase im Pfeffer zu liegen, denn die Tabelle wird einfach nicht aktualisiert. Habt ihr Ideen was ich falsch mache? Schon mal vielen Dank für eure Antworten. :)
 

Dit_

Bekanntes Mitglied
du brauchst keine Events zu erstellen es reicht

Java:
tableModel.fireTableDataChanged();
 
S

SlaterB

Gast
das Problem ist unklar, ich nehme mal allein das Ende:
es gibt einen TableModelListener, der reagiert auf ein Event in einem Model,
und feuert dann in exakt demselben Model, eben genau in 'source' wieder ein Event??

wenn es nicht gar eine Endlosschleife gibt, was kann das für einen Sinn haben?
soll vielleicht ein Event in einer 'anderen Klasse' ausgelöst werden? wieso dann in 'source',
und einfach das fremde 'benutzte' Event neu zu feuern ist generell auch mächtig fraglich, wer weiß was da intern an Zustand-Information gespeichert ist

------

allgemein sind beliebige Probleme denkbar,
z.B. häufig Aktionen in Models oder Tabellen die gar nicht mit der GUI verknüpft sind so dass letztlich egal ist was alles passiert,
der gepostete Code könnte noch so perfekt sein, spielt keine Rolle,
vollständige kleine Testprogramme sind deutlicher
 

Rabababär

Mitglied
Hallo SlaterB,
wenn es nicht gar eine Endlosschleife gibt, was kann das für einen Sinn haben?
Du hast Recht, das ergibt in der Tat keinen Sinn. Ich muss ehrlich zugeben, dass ich irgendwie auch gerade nicht mehr weiß, was ich mir eigentlich dabei gedacht habe.

Bis zu diesem unsinnigen letzten Teil sollte die Idee aber doch stimmen, oder? Es wird ein Event gefeuert und damit der TableModelListener benachrichtigt und die Methode tableChanged() ausgeführt.

Das eigentlich Ziel ist es nur die Tabelle dann zu aktualisieren. Wie kann ich das dann innerhalb der Methode tableChanged() erreichen?

allgemein sind beliebige Probleme denkbar,
z.B. häufig Aktionen in Models oder Tabellen die gar nicht mit der GUI verknüpft sind so dass letztlich egal ist was alles passiert,
Hm... was meinst du genau mit "nicht mit der GUI verknüpft"? Ich denke schon, dass alles richtig verknüpft ist, so wie es sein soll, da ich zum Beispiel in die Methode tableChanged() ein System.out.println() schreiben kann, welches dann auch auf der Konsole ausgegeben wird.
 
S

SlaterB

Gast
das ist ein Schritt, ob Code ausgeführt wird ist immer gut zu prüfen und zu wissen,
aber damit ist nicht gesagt ob genau die Tabelle x in der GUI aktualisiert wird statt einer anderen Tabelle y ohne echte Bedeutung,

wenn die Aktion natürlich von Benutzereingabe her ausgelöst wird ist es wahrscheinlich korrekt, aber es gibt immer Wege und Mittel um alles mögliche falsch zu machen,

ich könnte jetzt ein Beispielprogramm zusammenstellen mit deinen 3 Zeilen darunter, und das geht dann vielleicht (sicher bin ich ohne testen nicht),
aber was ist dann gewonnen? selbst damit ich testen kann wäre es eine nette Geste von dir, ein Mini-Programm zur Verfügung zu stellen ;)
 

Rabababär

Mitglied
selbst damit ich testen kann wäre es eine nette Geste von dir, ein Mini-Programm zur Verfügung zu stellen
Gerne doch aber leider ist meine GUI die Anzeige eines recht komplexene Projekts, dessen Code den Rahmen hier etwas sprengen würde.
Nichtsdestrotz aber hier mal einige (hoffentlich) hilfreiche Code Abschnitte:

Meine Klasse mit den beiden Tabellen, die dann später in der GUI angezeigt werden, sieht wie folgt aus:
Java:
package gui;

import java.util.Observable;
import java.util.concurrent.locks.ReentrantLock;

import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;


public class BaoTables {
	private BaoBoard board; 
	private JTable table = new JTable();
    private	JTable table_1 = new JTable();
	private static AbstractTableModel table_model; 
	private static AbstractTableModel table1_model; 
	
	public BaoTables (BaoBoard board) {
		this.board = board; 
		readValues();
		table.setModel(table_model);
		table.setBounds(0, 234, 788, 32);
		table_1.setModel(table1_model);
		table_1.setBounds(0, 400, 788, 32);
		table_model.addTableModelListener(board);
		table1_model.addTableModelListener(board);
	}
	
	
	public JTable getNortTable () {
		return this.table;
	}
	
	public JTable getSouthTable () {
		return this.table_1;
	}
	
	public AbstractTableModel getTableModelNorth () {
		return table_model; 
	}
	
	public AbstractTableModel getTableModelSouth () {
		return table1_model; 
	}
	
	public void setCellValue (int value,int row, int column) {
		table_model.setValueAt(value,row,column);
	}
	
	public static void readValues () {
		Object[][] valuenorth_arr = new Object[][] {
				{bao.Mchezo.getb8Value(),bao.Mchezo.getb7Value(),bao.Mchezo.getb6Value(),bao.Mchezo.getb5Value(),
					bao.Mchezo.getb4Value(), bao.Mchezo.getb3Value(), bao.Mchezo.getb2Value(), bao.Mchezo.getb1Value()},
					{bao.Mchezo.geta8Value(),bao.Mchezo.geta7Value(),bao.Mchezo.geta6Value(),bao.Mchezo.geta5Value(), 
						bao.Mchezo.geta4Value(),bao.Mchezo.geta3Value(),bao.Mchezo.geta2Value(), bao.Mchezo.geta1Value()},
		};
		Object [][] valuesouth_arr = new Object[][] {
				{bao.Mchezo.getA1Value(),bao.Mchezo.getA2Value(),bao.Mchezo.getA3Value(),bao.Mchezo.getA4Value(), 
					bao.Mchezo.getA5Value(), bao.Mchezo.getA6Value(), bao.Mchezo.getA7Value(), bao.Mchezo.getA8Value()},
					{bao.Mchezo.getB1Value(),bao.Mchezo.getB2Value(),bao.Mchezo.getB3Value(),bao.Mchezo.getB4Value(),
						bao.Mchezo.getB5Value(),bao.Mchezo.getB6Value(),bao.Mchezo.getB7Value(),bao.Mchezo.getB8Value()},
		};
		table_model = new DefaultTableModel(
				valuenorth_arr,
				new String[] {
						"8", "7", "6", "5", "4", "3", "2", "1"
				}
		) {
			private static final long serialVersionUID = 1L;
			boolean[] columnEditables = new boolean[] {
					false, false, false, false, false, false, false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		};
		table1_model = new DefaultTableModel(
				valuesouth_arr,
				new String[] {
						"1", "2", "3", "4", "5", "6", "7", "8"
				}
		) {
			private static final long serialVersionUID = 1L;
			boolean[] columnEditables = new boolean[] {
					false, false, false, false, false, false, false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		};
		TableModelEvent north_event = new TableModelEvent(table_model, TableModelEvent.ALL_COLUMNS,TableModelEvent.UPDATE);
		TableModelEvent south_event = new TableModelEvent(table1_model,TableModelEvent.UPDATE);
		table_model.fireTableChanged(north_event);
		table1_model.fireTableChanged(south_event);
	}
}

Die Methode readValues() wird immer dann aufgerufen, wenn sich in der Datenbasis etwas geändert hat. Kritisch sind dort diese Zeilen:
Java:
        TableModelEvent north_event = new TableModelEvent(table_model, TableModelEvent.ALL_COLUMNS,TableModelEvent.UPDATE);
        TableModelEvent south_event = new TableModelEvent(table1_model,TableModelEvent.UPDATE);
        table_model.fireTableChanged(north_event);
        table1_model.fireTableChanged(south_event);

Der TableModelListener, der auf eine Änderung reagiert ist die Haupt-GUI, welche auch TableModelListener implementiert und somit auch eine Methode tableChanged() zur Verfügung stellt.

Der Code der Haupt-GUI sieht wie folgt aus:
Java:
package gui;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.Label;
import javax.swing.JSeparator;
import javax.swing.AbstractAction;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

import logic.Logic;
import mchezaji.Mchezaji_Kaskazini;
import mchezaji.Mchezaji_Kusini;
import bao.Mchezo;

public class BaoBoard implements TableModelListener {

	private JFrame frame;
	private final Action action = new SwingAction();
	private BaoTables BaoTables = new BaoTables(this); 
	Mchezaji_Kusini South = new Mchezaji_Kusini("Player 2"); 
	Mchezaji_Kaskazini North = new Mchezaji_Kaskazini("Player 1");

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					BaoBoard window = new BaoBoard();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public BaoBoard() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		
		frame = new JFrame();
		frame.setBounds(100, 100, 807, 694);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JMenuBar menuBar = new JMenuBar();
		frame.setJMenuBar(menuBar);
		
		JMenu mnNewMenu = new JMenu("File");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmNewGame = new JMenuItem("New Game");
		mntmNewGame.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Mchezo game = new Mchezo(); 
				Logic.rungame(North,South,game);
			}
		});
		mnNewMenu.add(mntmNewGame);
		
		JMenuItem mntmExit = new JMenuItem("Exit");
		mntmExit.setAction(action);
		mnNewMenu.add(mntmExit);
		
		JMenu mnEdit = new JMenu("Edit");
		menuBar.add(mnEdit);
		
		JMenuItem mntmConfigurations = new JMenuItem("Configurations");
		mnEdit.add(mntmConfigurations);
		frame.getContentPane().setLayout(null);
		
		//createTable();
		
		frame.getContentPane().add(BaoTables.getNortTable());
		frame.getContentPane().add(BaoTables.getSouthTable());
		
		JSeparator separator = new JSeparator();
		separator.setBounds(0, 330, 788, 10);
		frame.getContentPane().add(separator);
		
		Label label = new Label("b8");
		label.setBounds(30, 180, 24, 21);
		frame.getContentPane().add(label);
		
		Label label_1 = new Label("b7");
		label_1.setBounds(130, 180, 24, 21);
		frame.getContentPane().add(label_1);
		
		Label label_2 = new Label("b6");
		label_2.setBounds(230, 180, 24, 21);
		frame.getContentPane().add(label_2);
		
		Label label_3 = new Label("b5");
		label_3.setBounds(330, 180, 24, 21);
		frame.getContentPane().add(label_3);
		
		Label label_4 = new Label("b4");
		label_4.setBounds(430, 180, 24, 21);
		frame.getContentPane().add(label_4);
		
		Label label_5 = new Label("b3");
		label_5.setBounds(530, 180, 24, 21);
		frame.getContentPane().add(label_5);
		
		Label label_6 = new Label("b2");
		label_6.setBounds(630, 180, 24, 21);
		frame.getContentPane().add(label_6);
		
		Label label_7 = new Label("b1");
		label_7.setBounds(730, 180, 24, 21);
		frame.getContentPane().add(label_7);
		
		Label label_8 = new Label("a8");
		label_8.setBounds(30, 290, 24, 21);
		frame.getContentPane().add(label_8);
		
		Label label_9 = new Label("a7");
		label_9.setBounds(130, 290, 24, 21);
		frame.getContentPane().add(label_9);
		
		Label label_10 = new Label("a6");
		label_10.setBounds(230, 290, 24, 21);
		frame.getContentPane().add(label_10);
		
		Label label_11 = new Label("a5");
		label_11.setBounds(330, 290, 24, 21);
		frame.getContentPane().add(label_11);
		
		Label label_12 = new Label("a4");
		label_12.setBounds(419, 290, 24, 21);
		frame.getContentPane().add(label_12);
		
		Label label_13 = new Label("a3");
		label_13.setBounds(504, 290, 24, 21);
		frame.getContentPane().add(label_13);
		
		Label label_14 = new Label("a2");
		label_14.setBounds(630, 290, 24, 21);
		frame.getContentPane().add(label_14);
		
		Label label_15 = new Label("a1");
		label_15.setBounds(730, 290, 24, 21);
		frame.getContentPane().add(label_15);
		
		Label label_16 = new Label("A1");
		label_16.setBounds(30, 345, 24, 21);
		frame.getContentPane().add(label_16);
		
		Label label_17 = new Label("A2");
		label_17.setBounds(130, 345, 24, 21);
		frame.getContentPane().add(label_17);
		
		Label label_18 = new Label("A3");
		label_18.setBounds(230, 345, 24, 21);
		frame.getContentPane().add(label_18);
		
		Label label_19 = new Label("A4");
		label_19.setBounds(330, 345, 24, 21);
		frame.getContentPane().add(label_19);
		
		Label label_20 = new Label("A5");
		label_20.setBounds(430, 345, 24, 21);
		frame.getContentPane().add(label_20);
		
		Label label_21 = new Label("A6");
		label_21.setBounds(530, 345, 24, 21);
		frame.getContentPane().add(label_21);
		
		Label label_22 = new Label("A7");
		label_22.setBounds(630, 345, 24, 21);
		frame.getContentPane().add(label_22);
		
		Label label_23 = new Label("A8");
		label_23.setBounds(730, 345, 24, 21);
		frame.getContentPane().add(label_23);
		
		Label label_24 = new Label("B1");
		label_24.setBounds(20, 463, 24, 21);
		frame.getContentPane().add(label_24);
		
		Label label_25 = new Label("B2");
		label_25.setBounds(130, 463, 24, 21);
		frame.getContentPane().add(label_25);
		
		Label label_26 = new Label("B3");
		label_26.setBounds(230, 473, 24, 21);
		frame.getContentPane().add(label_26);
		
		Label label_27 = new Label("B4");
		label_27.setBounds(330, 463, 24, 21);
		frame.getContentPane().add(label_27);
		
		Label label_28 = new Label("B5");
		label_28.setBounds(430, 463, 24, 21);
		frame.getContentPane().add(label_28);
		
		Label label_29 = new Label("B6");
		label_29.setBounds(530, 473, 24, 21);
		frame.getContentPane().add(label_29);
		
		Label label_30 = new Label("B7");
		label_30.setBounds(645, 473, 24, 21);
		frame.getContentPane().add(label_30);
		
		Label label_31 = new Label("B8");
		label_31.setBounds(730, 473, 24, 21);
		frame.getContentPane().add(label_31);
		
		JLabel lblNewLabel = new JLabel("Name of Player North: "+North.getName());
		lblNewLabel.setBounds(0, 100, 332, 15);
		frame.getContentPane().add(lblNewLabel);
		
		JLabel lblNameOfPlayer = new JLabel("Name of Player South: "+South.getName());
		lblNameOfPlayer.setBounds(0, 500, 332, 15);
		frame.getContentPane().add(lblNameOfPlayer);
		
		JLabel lblPool = new JLabel("Pool of "+South.getName()+": "+South.getPool());
		lblPool.setBounds(0, 520, 332, 15);
		frame.getContentPane().add(lblPool);
		
		JLabel lblPoolOfPlayer = new JLabel("Pool of "+North.getName()+": "+North.getPool());
		lblPoolOfPlayer.setBounds(0, 120, 332, 15);
		frame.getContentPane().add(lblPoolOfPlayer);
		
		
		JButton button = new JButton("<");
		button.setBounds(0, 206, 44, 22);
		frame.getContentPane().add(button);
		
		JButton btnNewButton = new JButton(">");
		btnNewButton.setBounds(44, 206, 44, 22);
		frame.getContentPane().add(btnNewButton);
		
		JButton button_1 = new JButton("<");
		button_1.setBounds(100, 206, 44, 22);
		frame.getContentPane().add(button_1);
		
		JButton button_2 = new JButton(">");
		button_2.setBounds(144, 206, 44, 22);
		frame.getContentPane().add(button_2);
		
		JButton button_3 = new JButton("<");
		button_3.setBounds(200, 206, 44, 22);
		frame.getContentPane().add(button_3);
		
		JButton button_4 = new JButton(">");
		button_4.setBounds(244, 206, 44, 22);
		frame.getContentPane().add(button_4);
		
		JButton button_5 = new JButton("<");
		button_5.setBounds(300, 206, 44, 22);
		frame.getContentPane().add(button_5);
		
		JButton button_6 = new JButton(">");
		button_6.setBounds(344, 206, 44, 22);
		frame.getContentPane().add(button_6);
		
		JButton button_7 = new JButton("<");
		button_7.setBounds(400, 206, 44, 22);
		frame.getContentPane().add(button_7);
		
		JButton button_8 = new JButton(">");
		button_8.setBounds(444, 206, 44, 22);
		frame.getContentPane().add(button_8);
		
		JButton button_9 = new JButton("<");
		button_9.setBounds(500, 206, 44, 22);
		frame.getContentPane().add(button_9);
		
		JButton button_10 = new JButton(">");
		button_10.setBounds(544, 206, 44, 22);
		frame.getContentPane().add(button_10);
		
		JButton button_11 = new JButton("<");
		button_11.setBounds(600, 206, 44, 22);
		frame.getContentPane().add(button_11);
		
		JButton button_12 = new JButton(">");
		button_12.setBounds(644, 206, 44, 22);
		frame.getContentPane().add(button_12);
		
		JButton button_13 = new JButton("<");
		button_13.setBounds(700, 206, 44, 22);
		frame.getContentPane().add(button_13);
		
		JButton button_14 = new JButton(">");
		button_14.setBounds(744, 206, 44, 22);
		frame.getContentPane().add(button_14);
		
		JButton button_15 = new JButton("<");
		button_15.setBounds(0, 266, 44, 22);
		frame.getContentPane().add(button_15);
		
		JButton button_16 = new JButton(">");
		button_16.setBounds(44, 266, 44, 22);
		frame.getContentPane().add(button_16);
		
		JButton button_17 = new JButton("<");
		button_17.setBounds(100, 266, 44, 22);
		frame.getContentPane().add(button_17);
		
		JButton button_18 = new JButton(">");
		button_18.setBounds(144, 266, 44, 22);
		frame.getContentPane().add(button_18);
		
		JButton button_19 = new JButton("<");
		button_19.setBounds(200, 266, 44, 22);
		frame.getContentPane().add(button_19);
		
		JButton button_20 = new JButton(">");
		button_20.setBounds(244, 266, 44, 22);
		frame.getContentPane().add(button_20);
		
		JButton button_21 = new JButton("<");
		button_21.setBounds(300, 266, 44, 22);
		frame.getContentPane().add(button_21);
		
		JButton button_22 = new JButton(">");
		button_22.setBounds(344, 266, 44, 22);
		frame.getContentPane().add(button_22);
		
		JButton button_23 = new JButton("<");
		button_23.setBounds(400, 266, 44, 22);
		frame.getContentPane().add(button_23);
		
		JButton button_24 = new JButton(">");
		button_24.setBounds(444, 266, 44, 22);
		frame.getContentPane().add(button_24);
		
		JButton button_25 = new JButton("<");
		button_25.setBounds(500, 266, 44, 22);
		frame.getContentPane().add(button_25);
		
		JButton button_26 = new JButton(">");
		button_26.setBounds(544, 266, 44, 22);
		frame.getContentPane().add(button_26);
		
		JButton button_27 = new JButton("<");
		button_27.setBounds(600, 266, 44, 22);
		frame.getContentPane().add(button_27);
		
		JButton button_28 = new JButton(">");
		button_28.setBounds(644, 266, 44, 22);
		frame.getContentPane().add(button_28);
		
		JButton button_29 = new JButton("<");
		button_29.setBounds(700, 266, 44, 22);
		frame.getContentPane().add(button_29);
		
		JButton button_30 = new JButton(">");
		button_30.setBounds(744, 266, 44, 22);
		frame.getContentPane().add(button_30);
		
		JButton button_31 = new JButton("<");
		button_31.setBounds(0, 430, 44, 22);
		frame.getContentPane().add(button_31);
		
		JButton button_32 = new JButton(">");
		button_32.setBounds(44, 430, 44, 22);
		frame.getContentPane().add(button_32);
		
		JButton button_33 = new JButton("<");
		button_33.setBounds(100, 430, 44, 22);
		frame.getContentPane().add(button_33);
		
		JButton button_34 = new JButton(">");
		button_34.setBounds(144, 430, 44, 22);
		frame.getContentPane().add(button_34);
		
		JButton button_35 = new JButton("<");
		button_35.setBounds(200, 430, 44, 22);
		frame.getContentPane().add(button_35);
		
		JButton button_36 = new JButton(">");
		button_36.setBounds(244, 430, 44, 22);
		frame.getContentPane().add(button_36);
		
		JButton button_37 = new JButton("<");
		button_37.setBounds(300, 430, 44, 22);
		frame.getContentPane().add(button_37);
		
		JButton button_38 = new JButton(">");
		button_38.setBounds(344, 430, 44, 22);
		frame.getContentPane().add(button_38);
		
		JButton button_39 = new JButton("<");		
		button_39.setBounds(400, 430, 44, 22);
		frame.getContentPane().add(button_39);
		
		JButton button_40 = new JButton(">");
		button_40.setBounds(444, 430, 44, 22);
		frame.getContentPane().add(button_40);
		
		JButton button_41 = new JButton("<");
		button_41.setBounds(500, 430, 44, 22);
		frame.getContentPane().add(button_41);
		
		JButton button_42 = new JButton(">");
		button_42.setBounds(544, 430, 44, 22);
		frame.getContentPane().add(button_42);
		
		JButton button_43 = new JButton("<");
		button_43.setBounds(600, 430, 44, 22);
		frame.getContentPane().add(button_43);
		
		JButton button_44 = new JButton(">");
		button_44.setBounds(644, 430, 44, 22);
		frame.getContentPane().add(button_44);
		
		JButton button_45 = new JButton("<");
		button_45.setBounds(700, 370, 44, 22);
		frame.getContentPane().add(button_45);
		
		JButton button_46 = new JButton(">");
		button_46.setBounds(744, 370, 44, 22);
		frame.getContentPane().add(button_46);
		
		JButton button_47 = new JButton("<");
		button_47.setBounds(0, 370, 44, 22);
		frame.getContentPane().add(button_47);
		
		JButton button_48 = new JButton(">");
		button_48.setBounds(44, 370, 44, 22);
		frame.getContentPane().add(button_48);
		
		JButton button_49 = new JButton("<");
		button_49.setBounds(100, 370, 44, 22);
		frame.getContentPane().add(button_49);
		
		JButton button_50 = new JButton(">");
		button_50.setBounds(144, 370, 44, 22);
		frame.getContentPane().add(button_50);
		
		JButton button_51 = new JButton("<");
		button_51.setBounds(200, 370, 44, 22);
		frame.getContentPane().add(button_51);
		
		JButton button_52 = new JButton(">");
		button_52.setBounds(244, 370, 44, 22);
		frame.getContentPane().add(button_52);
		
		JButton button_53 = new JButton("<");
		button_53.setBounds(300, 370, 44, 22);
		frame.getContentPane().add(button_53);
		
		JButton button_54 = new JButton(">");
		button_54.setBounds(344, 370, 44, 22);
		frame.getContentPane().add(button_54);
		
		JButton button_55 = new JButton("<");		
		button_55.setBounds(400, 370, 44, 22);
		frame.getContentPane().add(button_55);
		
		JButton button_56 = new JButton(">");
		button_56.setBounds(444, 370, 44, 22);
		frame.getContentPane().add(button_56);
		
		JButton button_57 = new JButton("<");
		button_57.setBounds(500, 370, 44, 22);
		frame.getContentPane().add(button_57);
		
		JButton button_58 = new JButton(">");
		button_58.setBounds(544, 370, 44, 22);
		frame.getContentPane().add(button_58);
		
		JButton button_59 = new JButton("<");
		button_59.setBounds(600, 370, 44, 22);
		frame.getContentPane().add(button_59);
		
		JButton button_60 = new JButton(">");
		button_60.setBounds(644, 370, 44, 22);
		frame.getContentPane().add(button_60);
		
		JButton button_61 = new JButton("<");
		button_61.setBounds(700, 370, 44, 22);
		frame.getContentPane().add(button_61);
		
		JButton button_62 = new JButton(">");
		button_62.setBounds(744, 370, 44, 22);
		frame.getContentPane().add(button_62);
		
		JButton button_63 = new JButton("<");
		button_63.setBounds(700, 430, 44, 22);
		frame.getContentPane().add(button_63);
		
		JButton button_64 = new JButton(">");
		button_64.setBounds(744, 430, 44, 22);
		frame.getContentPane().add(button_64);

	}

	private class SwingAction extends AbstractAction {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		public SwingAction() {
			putValue(NAME, "Exit");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			System.exit(1);
		}
	}

	@Override
	public void tableChanged(TableModelEvent e) {
          //Was muss nun hier stehen damit die Tabelle korrekt aktualisiert wird?
	}
	
}

Wenn ihr noch mehr Informationen braucht dann schreibt nur Bescheid. :)

P.S: Ich habe mir übrigens eine Registrierungs-Mail schicken lassen doch leider war mein Postfach voll. ;)
Gibt es eine Möglichkeit sich diese E-Mail nochmal schicken zu lassen?
 
S

SlaterB

Gast
> Gibt es eine Möglichkeit sich diese E-Mail nochmal schicken zu lassen?

hast du im Kontrollzentrum/ Profil usw. alles durchgeschaut? ich müsste mich selber erst schlau machen

-------

in readValues () legst du die Model erst an und wenige Zeilen später startest du die Events,
wo sollen die hinführen, wen interessiert das?
niemand ist an den Models als Listener registriert, insbesondere sind die Models keinen Tables zugeordnet,

es gibt noch Methoden wie getTableModelNorth(), die werden aber anscheinend nirgendwo benutzt,
und selbst wenn würden die vorher null oder alte Models zurückgeben, es gibt keine magische Verknüpfung dass das Neusetzen der Instanzattribute table_model automatisch auch irgendwo in Tables etwas ändert


ach, jetzt sehe ich im Konstruktor:
Java:
readValues();
table.setModel(table_model);
na gut, dann ist das ja doch vorhanden, aber offensichtlich wird das Model erst NACH readValues() gesetzt, die Events sind da schon fertig abgearbeitet,
andererseits sollte es keine Rolle spielen, wenn das Model gesetzt wird dann ist das ausreichend, dann passiert schon genug

rufst du später im Programmverlauf erneut readValues() auf?
dann gilt das was ich soeben geschrieben und in früheren Postings angedeutet habe: du erstellst neue Models x,
die vorhandenen Tabellen mit alten Models y interessiert das nicht die Bohne

ändere Daten in vorhandenen verwendeten Models und feuere dort Events, das bringt vielleicht was,
wenn du komplett neue Models erstellst, dann musst du diese auch an die Tabellen übergeben, Events sind dann initial nicht nötig,
Übergabe eines neuen Models ist schon dramatisch genug
 

Rabababär

Mitglied
hast du im Kontrollzentrum/ Profil usw. alles durchgeschaut? ich müsste mich selber erst schlau machen
Da bekomme ich witzigerweise folgende Meldung:
Rabababär, Sie haben keine Rechte, um auf diese Seite zuzugreifen. Folgende Gründe könnten z.B. dafür verantwortlich sein:

Sie versuchen, den Beitrag eines anderen Benutzers zu ändern oder auf administrative Funktionen zuzugreifen. Überprüfen Sie bitte in den Forenregeln, ob Sie diese Aktion ausführen dürfen.
Wenn Sie versucht haben, einen Beitrag zu schreiben, kann es sein, dass Ihr Benutzerkonto deaktiviert wurde oder noch aktiviert werden muss.

in readValues () legst du die Model erst an und wenige Zeilen später startest du die Events,
wo sollen die hinführen, wen interessiert das?
niemand ist an den Models als Listener registriert, insbesondere sind die Models keinen Tables zugeordnet,
Im Konstruktor habe ich den TableModels bereits board als listener übergeben. Wie du später ja schon richtig bemerkt hast, werden die Models später dann auch im Konstruktur gesetzt (nach readValues() ):

Java:
		table.setModel(table_model);
		table.setBounds(0, 234, 788, 32);
		table_1.setModel(table1_model);
		table_1.setBounds(0, 400, 788, 32);

es gibt noch Methoden wie getTableModelNorth(), die werden aber anscheinend nirgendwo benutzt,
Ganz genau. Das sind noch Überbleibsel vorheriger Versuche und könnten eigentlich gelöscht werden. ;)

ändere Daten in vorhandenen verwendeten Models und feuere dort Events, das bringt vielleicht was,
wenn du komplett neue Models erstellst, dann musst du diese auch an die Tabellen übergeben, Events sind dann initial nicht nötig,
Übergabe eines neuen Models ist schon dramatisch genug
Ok, das könnte das Problem sein. Reicht es dann einfach der Tabelle ein neues TableModel zu übergeben um die Anzeige zu aktualisieren?
 

Rabababär

Mitglied
Es funktioniert! :)
Vielen herzlichen Dank SlaterB, du hast mir wirklich sehr geholfen von dem Schlauch zu hüpfen, auf dem ich jetzt tagelang gestanden habe. ;)

Jetzt müsste mich nur noch jemand gänzlich freischalten und alles wäre perfekt. ;)

//edit: Jetzt ist auch die Registrierungs-Mail angekommen. Super Service hier!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
D MySQL-Tabellen in GUI anzeigen AWT, Swing, JavaFX & SWT 8
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
K JavaFX Spalten der Tabellen verschieben AWT, Swing, JavaFX & SWT 2
C SWT Tabellen-Layout in StyledText? AWT, Swing, JavaFX & SWT 6
T Swing 2 Tabellen parallel sortieren? (synchronisieren) AWT, Swing, JavaFX & SWT 3
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
K Tabellen Inhalt ( Zelle ) Modifizieren AWT, Swing, JavaFX & SWT 2
M Markieren von ganzen Zeilen in transparenten Tabellen AWT, Swing, JavaFX & SWT 6
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
D Tabellen Header & Abstand der Zeilen AWT, Swing, JavaFX & SWT 8
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
D Swing Tabellen-Namen im ListSelectionListener abfragen AWT, Swing, JavaFX & SWT 2
A Tabellen Spalte löschen AWT, Swing, JavaFX & SWT 6
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
M SWT SWT - Zwei Tabellen gleicher Größe AWT, Swing, JavaFX & SWT 5
T JTable - mehrere Tabellen verknüpfen AWT, Swing, JavaFX & SWT 14
T SWT Tabellen Kopf Schrift bearbeiten AWT, Swing, JavaFX & SWT 2
J Swing Spaltenbeschriftung bei Tabellen AWT, Swing, JavaFX & SWT 2
S Tabellen und Text Ausgabe in Swing GUI AWT, Swing, JavaFX & SWT 3
T Swing Sql Tabellen in jList ausgeben und speichern AWT, Swing, JavaFX & SWT 4
T Wie Zeilen in Tabellen farblich differenzieren? AWT, Swing, JavaFX & SWT 3
P Tabellen in Java - Zeile anhängen AWT, Swing, JavaFX & SWT 19
T Tabellen Inhalt in einem "anderem Frame" aktuallie AWT, Swing, JavaFX & SWT 7
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
D Voneinander abhängige Tabellen AWT, Swing, JavaFX & SWT 2
D Tabellen-Header anklickbar / auswählbar? AWT, Swing, JavaFX & SWT 5
L Tabellen formatieren ? AWT, Swing, JavaFX & SWT 4
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
G ein ContentProvider für 2 fast gleiche tabellen AWT, Swing, JavaFX & SWT 7
G Tabellen Items Einträge Aktualisieren AWT, Swing, JavaFX & SWT 2
K Spaltenbreite von mehreren Tabellen gleichzeitig verändern AWT, Swing, JavaFX & SWT 3
T listener für tabellen bei selektierung AWT, Swing, JavaFX & SWT 7
D mit swt.virtual mehrspaltige tabellen füllen AWT, Swing, JavaFX & SWT 3
I Probleme mit Tabellen (SWT) AWT, Swing, JavaFX & SWT 8
E SWT: Tabellen-Inhalt kopieren AWT, Swing, JavaFX & SWT 2
J Resultsets in Tabellen abbilden AWT, Swing, JavaFX & SWT 4
M Tabellen verschachteln AWT, Swing, JavaFX & SWT 7
G Tabellen Einträge löschen - JTable AWT, Swing, JavaFX & SWT 6
K Layout-Frage: 3 Feste Tabellen, 6-10dynamische AWT, Swing, JavaFX & SWT 2
R Mehrzeilige Darstellung von Spalten in SWING-Tabellen AWT, Swing, JavaFX & SWT 5
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
N JavaFX TextArea Updaten bevor Prozess gestartet wird AWT, Swing, JavaFX & SWT 7
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
A Swing JMenuBar updaten AWT, Swing, JavaFX & SWT 2
J JTree updaten AWT, Swing, JavaFX & SWT 2
S Swing Oberfläche rekusiv updaten mit updateUi() AWT, Swing, JavaFX & SWT 10
N JTable updaten AWT, Swing, JavaFX & SWT 2
M GUI muss updaten und neuzeichnen AWT, Swing, JavaFX & SWT 3
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
K JLists mit Fileobjekten updaten AWT, Swing, JavaFX & SWT 2
L JTextField updaten AWT, Swing, JavaFX & SWT 2
E Swing JProgressBar updaten AWT, Swing, JavaFX & SWT 3
M PropertyChangeListener - JTable bei neuen Objekten updaten? AWT, Swing, JavaFX & SWT 3
A JProgressBar updaten abhängig vom Output eines externen Skripts AWT, Swing, JavaFX & SWT 2
S Würfelanimation icon updaten AWT, Swing, JavaFX & SWT 8
L JTable aus MySQL DB updaten - Live AWT, Swing, JavaFX & SWT 7
Burny91 Swing Mit Timer JLabel updaten AWT, Swing, JavaFX & SWT 2
N Swing GUI updaten / Aufklappbare Jpanels AWT, Swing, JavaFX & SWT 2
w0ddes Swing Update: Laufendes GUI updaten AWT, Swing, JavaFX & SWT 8
Z Swing Komponenten updaten AWT, Swing, JavaFX & SWT 4
X SWT - Text von Text-Komponenten updaten (wie?) AWT, Swing, JavaFX & SWT 4
G JFreeChart und das updaten AWT, Swing, JavaFX & SWT 7
K Tabelle nach JOptionPane updaten AWT, Swing, JavaFX & SWT 5
J [JTree] Node updaten AWT, Swing, JavaFX & SWT 3
G Ein jTextField im laufe das Programmes immer wieder updaten AWT, Swing, JavaFX & SWT 2
QDog JComboBox updaten, ArrayList AWT, Swing, JavaFX & SWT 7
G JTextField von andere classe updaten AWT, Swing, JavaFX & SWT 11
P GUI-Updaten während eines externen Prozesses AWT, Swing, JavaFX & SWT 2
G JTable aus Thread heraus updaten AWT, Swing, JavaFX & SWT 3
P Components updaten AWT, Swing, JavaFX & SWT 2
P JTable (->Datenbank) editieren/updaten AWT, Swing, JavaFX & SWT 3
R Componenten eines JFrames updaten AWT, Swing, JavaFX & SWT 11
R Menubar immer updaten! AWT, Swing, JavaFX & SWT 9
X textarea updaten bevor eine Methode aufegerufen wird AWT, Swing, JavaFX & SWT 6
C Text in JTextArea bei mouseEntered() updaten AWT, Swing, JavaFX & SWT 2
C JFrame updaten! AWT, Swing, JavaFX & SWT 2
J JFrame mit Zeigeruhr updaten AWT, Swing, JavaFX & SWT 16
P SWT table updaten AWT, Swing, JavaFX & SWT 7
C Textarea kontinuerlich updaten AWT, Swing, JavaFX & SWT 3
M Probleme mit dem Updaten von graphischen Komponenten AWT, Swing, JavaFX & SWT 2
M JTree updaten AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben