Tabelle komplett neu laden

Status
Nicht offen für weitere Antworten.

daily

Aktives Mitglied
Heho,

ich habe folgendes Problem:

In einer kleinen GUI befindet sich u.A. eine Combobox und eine Tabelle. Wenn ich den Wert in der ComboBox durch Auswahl ändere soll sich der komplette Tabelleninhalt ändern. Und genau da komm ich nicht weiter. Ich hab die neuen Daten quasi schon im TableModel das von der Tabelle verwendet wird, aber ich kann der Tabelle irgendwie nicht sagen dass es die Daten aus dem Model neu laden soll.

Hier der Code der GUI:

Code:
package xxx;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import de.siemens.ipns.scc.stg.model.GetSet;
import de.siemens.ipns.scc.stg.model.GetSetNumbers;
import de.siemens.ipns.scc.stg.model.SqlStatement;
import de.siemens.ipns.scc.stg.model.SqlStatementWithArgs;
import de.siemens.ipns.scc.stg.model.TableSetView;

/* TODO: Action Listener schreiben
 * TODO: Spaltensortierung ermöglichen
 */

public class SetView {

	private JFrame frame_;
	private JLabel waehlen_;
	private JLabel aendern_;
	private JPanel tableViewport_;
	private JPanel setChoiceViewport_;
	private JPanel aendernViewport_;
	private JComboBox setChoice_;
	private ResultSet setsNrs_;
	private ResultSet sets_;
	private JButton aendernButton_;
	private ActionListener getSetContentListener = new getSetContentController();
	private Connection con;
	private TableSetView contentTable_;
	public SetView(Connection con) {

		// Erstellen des Frames
		this.con = con;
		frame_ = new JFrame("Set-Anzeige");
		frame_.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame_.getContentPane().setLayout(new BorderLayout());
		frame_.setResizable(false);

		setChoiceViewport_ = new JPanel();
		setChoiceViewport_.setLayout(new BorderLayout());
		setChoiceViewport_.setPreferredSize(new Dimension(600, 20));
		setChoiceViewport_.setOpaque(true);

		// Erstellen des Info-Labels zur Combobox
		waehlen_ = new JLabel("Bitte waehlen Sie das anzuzeigende Set aus:   ");
		setChoiceViewport_.add(BorderLayout.WEST, waehlen_);

		// Erstellen der Combobox mit den Setnummern
		setChoice_ = new JComboBox();
		setChoice_.setPreferredSize(new Dimension(45, 30));

		SqlStatement getSetNumbers = new GetSetNumbers();
		setsNrs_ = getSetNumbers.getResult(con);

		int i = 0;
		try {
			while (setsNrs_.next()) {
				setChoice_.insertItemAt(setsNrs_.getString(1), i);
				i++;
			}
			if (i > 0)
				setChoice_.setSelectedIndex(0);
		} catch (SQLException x) {
			x.printStackTrace();
		}

		// Combobox mit Setnummern dem Frame hinzufuegen
		setChoiceViewport_.add(BorderLayout.EAST, setChoice_);
		frame_.getContentPane().add(BorderLayout.NORTH, setChoiceViewport_);

		// Erstellen und hinzufuegen der Tabelle mit dem Inhalt des erstellen
		// Sets
		Object[][] data = {};
		contentTable_ = new TableSetView(data);
		contentTable_.setOpaque(true); // content panes must be opaque

		tableViewport_ = new JPanel();
		tableViewport_.setLayout(new BorderLayout());
		tableViewport_.setPreferredSize(new Dimension(620, 230));
		tableViewport_.setOpaque(true);
		tableViewport_.add(contentTable_);

		frame_.getContentPane().add(BorderLayout.CENTER, tableViewport_);
		
		//Hinzufuegen des Action Listeners für die ComboBoc weil nun auch die Tabelle existiert
		setChoice_.addActionListener(getSetContentListener);
		
		// Erstellen des Info-Labels zum Aendern-Button
		aendernViewport_ = new JPanel();
		aendernViewport_.setLayout(new BorderLayout());
		aendernViewport_.setPreferredSize(new Dimension(600, 50));
		aendernViewport_.setOpaque(true);

		aendern_ = new JLabel(
				"Bitte wählen Sie die zu ändernden Datensätze aus und klicken Sie anschließend auf „Ändern“");
		aendernViewport_.add(BorderLayout.NORTH, aendern_);

		// Button zum Wechesel zjm naechsten Screen zwecks Änderung von
		// Datensätzen
		aendernButton_ = new JButton("Ändern");
		aendernButton_.addActionListener(getSetContentListener);
		aendernViewport_.add(BorderLayout.SOUTH, aendernButton_);
		frame_.getContentPane().add(BorderLayout.SOUTH, aendernViewport_);
		
		// Fertigstellen des Frames
		frame_.addWindowListener(new FrameController());
		frame_.pack();
		frame_.setVisible(true);
	}

	private class getSetContentController implements ActionListener {

		public void actionPerformed(ActionEvent anActionEvent) {
			try {
				SqlStatementWithArgs getSet = new GetSet();
				String[] args = { (String) setChoice_.getSelectedItem() };
				System.out.println(args[0]);
				sets_ = getSet.getResult(con, args);
				
				int j = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						j++;
					}
				}
				
				Object[][] data = new Object[12][j];
				
				int i = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						data[i][0]= sets_.getString(1);
						data[i][1]= new Boolean(false);
						data[i][2]= sets_.getString(2);
						data[i][3]= sets_.getString(3);
						data[i][4]= sets_.getString(4);
						data[i][5]= sets_.getString(5);
						data[i][6]= sets_.getString(6);
						data[i][7]= sets_.getString(7);
						data[i][8]= sets_.getString(8);
						data[i][9]= sets_.getString(9);
						data[i][10]= sets_.getString(10);
						data[i][11]= sets_.getString(11);
				
						i++;
						}
				}
				
				frame_.setVisible(false);
				tableViewport_.remove(contentTable_);
				contentTable_= new TableSetView(data);
				tableViewport_.add(BorderLayout.CENTER, contentTable_);
				frame_.setVisible(true);
				
			} catch (IllegalArgumentException x) {
				new ExceptionView(frame_, x);
			} catch (SQLException x) {
				new ExceptionView(frame_, x);
			}
		}
	}

	private class FrameController extends WindowAdapter {
		public void windowClosing(WindowEvent aWindowEvent) {
			aWindowEvent.getWindow().dispose();
		}
	}

}

Und der Code des Tabellen-Modells:

Code:
package xxx;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class TableSetView extends JPanel {

	private static final long serialVersionUID = -635949636482015396L;
	private JTable table_;
	private SetViewTableModel model_ = new SetViewTableModel();
	
	//Erstellen der Tabelle
	public TableSetView(Object[][] data) {
		
		model_.setData(data);
		table_ = new JTable(model_); // neue Tabelle nach dem SetViewTableModel erstellen
		table_.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // autm. Größenanpassung der Spalten ausschalten
		table_.getTableHeader().setReorderingAllowed(false);
		table_.setPreferredScrollableViewportSize(new Dimension(600, 150)); // Darstellungsgröße
		int tablesize = table_.getColumnCount(); // Tabellengröße auslesen

		// Alle Spalten auf die optimale Breite bringen
		for (int i = 0; i < tablesize; i++) { 
			packColumn(table_, i, 5);
		}

		// Die Ausrichtung aller Spalten einstellen
		table_.setDefaultRenderer(Object.class, new ColumnAlignRenderer());
		
		// Die Ausrichtung aller Header einstellen
		renderHeaders();

		// Erstellen der Scrollleisten
		JScrollPane scrollPane = new JScrollPane(table_,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

		add(scrollPane); // die Scrollleisten zur Tabelle hinzufügen

	}

	// Spalten auf die optimale Breite bringen
	public void packColumn(JTable table, int vColIndex, int margin) {
		DefaultTableColumnModel colModel = (DefaultTableColumnModel) table
				.getColumnModel();
		TableColumn col = colModel.getColumn(vColIndex);
		int width = 0;

		// Get width of column header
		TableCellRenderer renderer = col.getHeaderRenderer();
		if (renderer == null) {
			renderer = table.getTableHeader().getDefaultRenderer();
		}
		Component comp = renderer.getTableCellRendererComponent(table, col
				.getHeaderValue(), false, false, 0, 0);
		width = comp.getPreferredSize().width;

		// Get maximum width of column data
		for (int r = 0; r < table.getRowCount(); r++) {
			renderer = table.getCellRenderer(r, vColIndex);
			comp = renderer.getTableCellRendererComponent(table, table
					.getValueAt(r, vColIndex), false, false, r, vColIndex);
			width = Math.max(width, comp.getPreferredSize().width);
		}

		width += 2 * margin;
		col.setPreferredWidth(width);
	}

	// Header ausrichten
	public void renderHeaders() {
		HeaderAlignRender header = new HeaderAlignRender();

		for (int i = 0; i < 11; i++) {
			table_.getColumnModel().getColumn(i).setHeaderRenderer(header);
		}
	}
	
	public void setData(Object[][] data){
		model_.setData(data);
	}
	
	public void fireTableDataChanged(){
		model_.fireTableDataChanged();
	}
	
	
	// Das Modell für die Tabelle in SetView
	private class SetViewTableModel extends AbstractTableModel {

		private static final long serialVersionUID = -2313850031325603668L;

		private String[] columnNames = { " ConfNr", " Aendern", " im Inventar",
				" Verliehen", " PSTNr", " ErzeugnisNr", " ErzeugnisNr2",
				" Ueberschrift", " Menge", " Seriennr.", " Kommentar" };

		private Object[][] data = { { "116", new Boolean(false), "nein",
				"nein", "CUA978", "L30250F 622A978", "L30250-F622-A978",
				"Aktivierungsschlüssel für Rest of World", "1", "", "" } };

		public int getColumnCount() {
			return columnNames.length;
		}

		public int getRowCount() {
			return data.length;
		}

		public String getColumnName(int col) {
			return columnNames[col];
		}

		public Object getValueAt(int row, int col) {
			return data[row][col];
		}

		public Class getColumnClass(int c) {
			return getValueAt(0, c).getClass();
		}

		public boolean isCellEditable(int row, int col) {
			if (col == 1) {
				return true;
			} else {
				return false;
			}
		}

		public void setValueAt(Object value, int row, int col) {
			data[row][col] = value;
			fireTableCellUpdated(row, col);
		}

		public Object[][] getData() {
			return data;
		}
		
		public void setData(Object[][] data) {
			this.data = data;
		}
	}

	// Klase zur Ausrichtung aller Spalten in der Tabelle in SetView
	private class ColumnAlignRenderer extends DefaultTableCellRenderer {

		private static final long serialVersionUID = 3769977988764788794L;

		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			super.getTableCellRendererComponent(table, value, isSelected,
					hasFocus, row, column);

			if (column == 7 || column == 10)
				setHorizontalAlignment(LEFT);
			else
				setHorizontalAlignment(CENTER);

			return this;
		}
	}

	//Klasse zur Ausrichtung aller Header der Tabelle in SetView
	private class HeaderAlignRender extends DefaultTableCellRenderer {

		private static final long serialVersionUID = -3784038794680191265L;

		public Component getTableCellRendererComponent(JTable table,
				Object arg1, boolean arg2, boolean arg3, int arg4, int column) {

			Component toReturn = table.getTableHeader().getDefaultRenderer()
					.getTableCellRendererComponent(table, arg1, arg2, arg3,
							arg4, column);

			if (column == 7 || column == 10)
				((JLabel) toReturn)
						.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);
			else
				((JLabel) toReturn)
						.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
			return toReturn;
		}
	}
}
 

AlArenal

Top Contributor
Die relevante Zeile Code sollen wir uns nun selber suchen? Och nööö....

Verrrat mal warum meine Suchfunktion sagt, dass es in deinem Code kein #setModel-Aufruf gibt?
 

TRunKX

Bekanntes Mitglied
Nimm mal folgendes Konstrukt beim erstellen mit dem DefaultTableModel


also: *räusper*

DefaultTableModel dtm = new DefaultTableModel ();
JTable jt = new JTable (dtm);

so damit sollte die Angezeigte JTable bei Änderungen im Model sofort anzeigen!


MFG
 

AlArenal

Top Contributor
@TRunKX:

Das bringt ihn ja auch nichtr weiter. Ist ja Irrsinn die ganze JTable neu zu erzeugen, nur weil er ein neues Model anzeigen will, welches er nach eigenen Aussagen schon fertig in der Schublade hat. Wer so vorgeht ist prädestiniert für Hackentricks á la #validate und #updateUI.

JTable#setModel heißt die Lösung, alles andere ist Pfusch am Bau ;)

P.S.:
Ich tausch doch auch nicht den Wagen, wenn ich tanken muss...
 

daily

Aktives Mitglied
Hab jetz alles mal ein wenig verändert. Unter anderem meine ModelClass als extra Klasse und nicht als inner class gemacht.

Eigentlich arbeite ich nu auch mit set bzw. getModel. Aber aktualisiert wird die Tabelle trotzdem nicht. Muss ich nicht irgendwie erst nen Refresh machen oder so? Anbei nochmal der aktuelle Code. Wobei aus miener Sicht folgende Zeilen relevant sind:

Code:
private class getSetContentController implements ActionListener {

		public void actionPerformed(ActionEvent anActionEvent) {
			try {
				SqlStatementWithArgs getSet = new GetSet();
				String[] args = { (String) setChoice_.getSelectedItem() };
				System.out.println(args[0]);
				sets_ = getSet.getResult(con, args);
				
				Object[][] data = new Object[100][12];
				
				int i = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						data[i][0]= sets_.getString(1);
						data[i][1]= new Boolean(false);
						data[i][2]= sets_.getString(2);
						data[i][3]= sets_.getString(3);
						data[i][4]= sets_.getString(4);
						data[i][5]= sets_.getString(5);
						data[i][6]= sets_.getString(6);
						data[i][7]= sets_.getString(7);
						data[i][8]= sets_.getString(8);
						data[i][9]= sets_.getString(9);
						data[i][10]= sets_.getString(10);
						data[i][11]= sets_.getString(11);
				
						i++;
						}
				}
				
				SetViewTableModel model = (SetViewTableModel)contentTable_.getModel();
				model.setData(data);
				contentTable_.setModel(model);
				
	
			} catch (IllegalArgumentException x) {
				new ExceptionView(frame_, x);
			} catch (SQLException x) {
				new ExceptionView(frame_, x);
			}
		}
	}


Kompletter Code:

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import de.siemens.ipns.scc.stg.model.GetSet;
import de.siemens.ipns.scc.stg.model.GetSetNumbers;
import de.siemens.ipns.scc.stg.model.SetViewTableModel;
import de.siemens.ipns.scc.stg.model.SqlStatement;
import de.siemens.ipns.scc.stg.model.SqlStatementWithArgs;
import de.siemens.ipns.scc.stg.model.TableSetView;

/* TODO: Action Listener schreiben
 * TODO: Spaltensortierung ermöglichen
 */

public class SetView {

	private JFrame frame_;
	private JLabel waehlen_;
	private JLabel aendern_;
	private JPanel tableViewport_;
	private JPanel setChoiceViewport_;
	private JPanel aendernViewport_;
	private JComboBox setChoice_;
	private ResultSet setsNrs_;
	private ResultSet sets_;
	private JButton aendernButton_;
	private ActionListener getSetContentListener = new getSetContentController();
	private Connection con;
	private TableSetView contentTable_;
	public SetView(Connection con) {

		// Erstellen des Frames
		this.con = con;
		frame_ = new JFrame("Set-Anzeige");
		frame_.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame_.getContentPane().setLayout(new BorderLayout());
		frame_.setResizable(false);

		setChoiceViewport_ = new JPanel();
		setChoiceViewport_.setLayout(new BorderLayout());
		setChoiceViewport_.setPreferredSize(new Dimension(600, 20));
		setChoiceViewport_.setOpaque(true);

		// Erstellen des Info-Labels zur Combobox
		waehlen_ = new JLabel("Bitte waehlen Sie das anzuzeigende Set aus:   ");
		setChoiceViewport_.add(BorderLayout.WEST, waehlen_);

		// Erstellen der Combobox mit den Setnummern
		setChoice_ = new JComboBox();
		setChoice_.setPreferredSize(new Dimension(45, 30));

		SqlStatement getSetNumbers = new GetSetNumbers();
		setsNrs_ = getSetNumbers.getResult(con);

		int i = 0;
		try {
			while (setsNrs_.next()) {
				setChoice_.insertItemAt(setsNrs_.getString(1), i);
				i++;
			}
			if (i > 0)
				setChoice_.setSelectedIndex(0);
		} catch (SQLException x) {
			x.printStackTrace();
		}

		// Combobox mit Setnummern dem Frame hinzufuegen
		setChoiceViewport_.add(BorderLayout.EAST, setChoice_);
		frame_.getContentPane().add(BorderLayout.NORTH, setChoiceViewport_);

		// Erstellen und hinzufuegen der Tabelle mit dem Inhalt des erstellen
		// Sets
		Object[][] data = {};
		contentTable_ = new TableSetView(data);
		contentTable_.setOpaque(true); // content panes must be opaque

		tableViewport_ = new JPanel();
		tableViewport_.setLayout(new BorderLayout());
		tableViewport_.setPreferredSize(new Dimension(620, 230));
		tableViewport_.setOpaque(true);
		tableViewport_.add(contentTable_);

		frame_.getContentPane().add(BorderLayout.CENTER, tableViewport_);
		
		//Hinzufuegen des Action Listeners für die ComboBoc weil nun auch die Tabelle existiert
		setChoice_.addActionListener(getSetContentListener);
		
		// Erstellen des Info-Labels zum Aendern-Button
		aendernViewport_ = new JPanel();
		aendernViewport_.setLayout(new BorderLayout());
		aendernViewport_.setPreferredSize(new Dimension(600, 50));
		aendernViewport_.setOpaque(true);

		aendern_ = new JLabel(
				"Bitte wählen Sie die zu ändernden Datensätze aus und klicken Sie anschließend auf „Ändern“");
		aendernViewport_.add(BorderLayout.NORTH, aendern_);

		// Button zum Wechesel zjm naechsten Screen zwecks Änderung von
		// Datensätzen
		aendernButton_ = new JButton("Ändern");
		aendernButton_.addActionListener(getSetContentListener);
		aendernViewport_.add(BorderLayout.SOUTH, aendernButton_);
		frame_.getContentPane().add(BorderLayout.SOUTH, aendernViewport_);
		
		// Fertigstellen des Frames
		frame_.addWindowListener(new FrameController());
		frame_.pack();
		frame_.setVisible(true);
	}

	private class getSetContentController implements ActionListener {

		public void actionPerformed(ActionEvent anActionEvent) {
			try {
				SqlStatementWithArgs getSet = new GetSet();
				String[] args = { (String) setChoice_.getSelectedItem() };
				System.out.println(args[0]);
				sets_ = getSet.getResult(con, args);
				
				Object[][] data = new Object[100][12];
				
				int i = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						data[i][0]= sets_.getString(1);
						data[i][1]= new Boolean(false);
						data[i][2]= sets_.getString(2);
						data[i][3]= sets_.getString(3);
						data[i][4]= sets_.getString(4);
						data[i][5]= sets_.getString(5);
						data[i][6]= sets_.getString(6);
						data[i][7]= sets_.getString(7);
						data[i][8]= sets_.getString(8);
						data[i][9]= sets_.getString(9);
						data[i][10]= sets_.getString(10);
						data[i][11]= sets_.getString(11);
				
						i++;
						}
				}
				
				SetViewTableModel model = (SetViewTableModel)contentTable_.getModel();
				model.setData(data);
				contentTable_.setModel(model);
				
	
			} catch (IllegalArgumentException x) {
				new ExceptionView(frame_, x);
			} catch (SQLException x) {
				new ExceptionView(frame_, x);
			}
		}
	}

	private class FrameController extends WindowAdapter {
		public void windowClosing(WindowEvent aWindowEvent) {
			aWindowEvent.getWindow().dispose();
		}
	}

}

Code:
import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class TableSetView extends JPanel {

	private static final long serialVersionUID = -635949636482015396L;
	private JTable table_;
	private SetViewTableModel model_ = new SetViewTableModel();
	
	//Erstellen der Tabelle
	public TableSetView(Object[][] data) {
		
		model_.setData(data);
		table_ = new JTable(); // neue Tabelle nach dem SetViewTableModel erstellen
		setModel(model_);
		table_.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // autm. Größenanpassung der Spalten ausschalten
		table_.getTableHeader().setReorderingAllowed(false);
		table_.setPreferredScrollableViewportSize(new Dimension(600, 150)); // Darstellungsgröße
		int tablesize = table_.getColumnCount(); // Tabellengröße auslesen

		// Alle Spalten auf die optimale Breite bringen
		for (int i = 0; i < tablesize; i++) { 
			packColumn(table_, i, 5);
		}

		// Die Ausrichtung aller Spalten einstellen
		table_.setDefaultRenderer(Object.class, new ColumnAlignRenderer());
		
		// Die Ausrichtung aller Header einstellen
		renderHeaders();

		// Erstellen der Scrollleisten
		JScrollPane scrollPane = new JScrollPane(table_,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

		add(scrollPane); // die Scrollleisten zur Tabelle hinzufügen

	}

	public void setModel(AbstractTableModel model){
		table_.setModel(model);
	}
	
	public AbstractTableModel getModel(){
		return (AbstractTableModel)table_.getModel();
	}
	
	// Spalten auf die optimale Breite bringen
	public void packColumn(JTable table, int vColIndex, int margin) {
		DefaultTableColumnModel colModel = (DefaultTableColumnModel) table
				.getColumnModel();
		TableColumn col = colModel.getColumn(vColIndex);
		int width = 0;

		// Get width of column header
		TableCellRenderer renderer = col.getHeaderRenderer();
		if (renderer == null) {
			renderer = table.getTableHeader().getDefaultRenderer();
		}
		Component comp = renderer.getTableCellRendererComponent(table, col
				.getHeaderValue(), false, false, 0, 0);
		width = comp.getPreferredSize().width;

		// Get maximum width of column data
		for (int r = 0; r < table.getRowCount(); r++) {
			renderer = table.getCellRenderer(r, vColIndex);
			comp = renderer.getTableCellRendererComponent(table, table
					.getValueAt(r, vColIndex), false, false, r, vColIndex);
			width = Math.max(width, comp.getPreferredSize().width);
		}

		width += 2 * margin;
		col.setPreferredWidth(width);
	}

	// Header ausrichten
	public void renderHeaders() {
		HeaderAlignRender header = new HeaderAlignRender();

		for (int i = 0; i < 11; i++) {
			table_.getColumnModel().getColumn(i).setHeaderRenderer(header);
		}
	}

	// Klase zur Ausrichtung aller Spalten in der Tabelle in SetView
	private class ColumnAlignRenderer extends DefaultTableCellRenderer {

		private static final long serialVersionUID = 3769977988764788794L;

		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			super.getTableCellRendererComponent(table, value, isSelected,
					hasFocus, row, column);

			if (column == 7 || column == 10)
				setHorizontalAlignment(LEFT);
			else
				setHorizontalAlignment(CENTER);

			return this;
		}
	}

	//Klasse zur Ausrichtung aller Header der Tabelle in SetView
	private class HeaderAlignRender extends DefaultTableCellRenderer {

		private static final long serialVersionUID = -3784038794680191265L;

		public Component getTableCellRendererComponent(JTable table,
				Object arg1, boolean arg2, boolean arg3, int arg4, int column) {

			Component toReturn = table.getTableHeader().getDefaultRenderer()
					.getTableCellRendererComponent(table, arg1, arg2, arg3,
							arg4, column);

			if (column == 7 || column == 10)
				((JLabel) toReturn)
						.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);
			else
				((JLabel) toReturn)
						.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
			return toReturn;
		}
	}
}

Code:
import javax.swing.table.AbstractTableModel;

//Das Modell für die Tabelle in SetView
public class SetViewTableModel extends AbstractTableModel {

	private static final long serialVersionUID = -2313850031325603668L;

	private String[] columnNames = { " ConfNr", " Aendern", " im Inventar",
			" Verliehen", " PSTNr", " ErzeugnisNr", " ErzeugnisNr2",
			" Ueberschrift", " Menge", " Seriennr.", " Kommentar" };

	private Object[][] data = {};

	public int getColumnCount() {
		return columnNames.length;
	}

	public int getRowCount() {
		return data.length;
	}

	public String getColumnName(int col) {
		return columnNames[col];
	}

	public Object getValueAt(int row, int col) {
		return data[row][col];
	}

	public Class getColumnClass(int c) {
		return getValueAt(0, c).getClass();
	}

	public boolean isCellEditable(int row, int col) {
		if (col == 1) {
			return true;
		} else {
			return false;
		}
	}

	public void setValueAt(Object value, int row, int col) {
		data[row][col] = value;
		fireTableCellUpdated(row, col);
	}

	public Object[][] getData() {
		return data;
	}
	
	public void setData(Object[][] data) {
		this.data = data;
	}
}
 

AlArenal

Top Contributor
Viel zuviel Code.. ;)

Ich hatte zunächst angenommen du würdest die neuen Daten auch in eine neue Model-Instanz packen. Dann hätte das mit #setModel auch funktioniert.

Du aber schmeißt nur neue Daten in die bestehende und gesetzte Model-Instanz, da wird #setModel unwirksam. Ich gehe sogar ohne nachzuschauen jede Wette ein, dass in im Source zu JTabel#setModel die Mthode nicht durchexerziert wird, wenn du das bereits gesetzte Model nochmal setzt - wozu auch?

Wenn du aber so vorgehen willst, muss die #setData deines Models an den Listener (die JTable) einen passenden TableModelChangedEvent abfeuern, denn wie sonst soll die JTable erfahren, dass sich im Model etwas geändert hat?
 

TRunKX

Bekanntes Mitglied
Ich sags echt nur ungern aber das DeflautTableModel hat das schon.

Zum Thema tanken von eben....

Wenn ich ins Gelände will dann nahem ich mir nen Jeep wenn ich auf die Autobahn will dann nen Sportwagen und wenn ich beides will baue ich es mir selber. so isses auch bei Java manchmal stellt man im Gebirge fest das der Lambo zu tief liegt!
 

AlArenal

Top Contributor
TRunKX hat gesagt.:
Ich sags echt nur ungern aber das DeflautTableModel hat das schon.

Ich sags auch ungern, aber er benutzt keines, sondern ein SetViewTableModel extends AbstractTableModel und da gibts ein #fireTableDataChanged.

Damit ist er nur noch halb so feißig wie ich, der sich seine Models immer selbst schnitzt aber noch nicht so faul wie du - und das vielleicht mit voller Absicht? ;)
 

daily

Aktives Mitglied
Hab nu wieder mal was geändert und bin nu auch nen Schritt weiter:

Code:
private class getSetContentController implements ActionListener {

		public void actionPerformed(ActionEvent anActionEvent) {
			try {
				SqlStatementWithArgs getSet = new GetSet();
				String[] args = { (String) setChoice_.getSelectedItem() };
				System.out.println(args[0]);
				sets_ = getSet.getResult(con, args);
				
				Object[][] data = new Object[100][11];
				
				int i = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						data[i][0]= sets_.getString(1);
						data[i][1]= new Boolean(false);
						data[i][2]= sets_.getString(2);
						data[i][3]= sets_.getString(3);
						data[i][4]= sets_.getString(4);
						data[i][5]= sets_.getString(5);
						data[i][6]= sets_.getString(6);
						data[i][7]= sets_.getString(7);
						data[i][8]= sets_.getString(8);
						data[i][9]= sets_.getString(9);
						data[i][10]= sets_.getString(10);
						i++;
						}
				}
				
				SetViewTableModel model = (SetViewTableModel)contentTable_.getModel();
				model.setData(data);
				contentTable_.setModel(model);
				contentTable_.getModel().fireTableDataChanged();
		
	
			} catch (IllegalArgumentException x) {
				new ExceptionView(frame_, x);
			} catch (SQLException x) {
				new ExceptionView(frame_, x);
			}
		catch (NullPointerException x) {
			new ExceptionView(frame_, x);
		}
		}
	}

Neu hinzugekommen ist u.A. contentTable_.getModel().fireTableDataChanged();
Aber nu is alles recht seltsam. Zwar wird mir in der Tabelle in 2 von 10 fällen was angezeigt, aber:
- Wenn ich nach rechts scrolle stimmen nach kurzer Zeit die Spalten nicht mehr mit den Header überein. Um genau zu sein ist ein Header (kommentar) verschwunden.
-Sobald das passiert hagelt es NullPointerExceptions die sich aber ulkigerweise nicht catchen lassen
- Wenn man nach unten scrolled hagelt es auch an nem gewissen Punkt NullPointerExceptions
- Bei der erwähnten Sache mit den nicht mehr übereinstimmenden Header und Spalten verschwinden sobald diese nicht mehr übereinstimmung anfängt etliche Zeilen.
- Durch markieren von Spalten wird diese Übereinstimmung wieder kurz hergestellt und die Zeilen werden wieder sichtbar.
-Alles in allem hagelt es aber pausenlos genannte Exceptions
 

AlArenal

Top Contributor
Schön, dass du keine einzige Exception gepostet hast...

Sind die "neuen" Daten auch anders aufgebaut? Nimm mal statt #fireTableDataChanged #fireTableStructureChanged oder erzeug ein neues Model.
 

daily

Aktives Mitglied
Sowohl fireTableStructureChange als auch das Erstellen eines neuen Modells haben nichts gebracht. Die korrekte Spaltenanzahl und die orrekten Bezeichnungen hat er, das habe ich per sysout überprüft.

Hier eine Exception.
Code:
java.lang.NullPointerException
	at xxx.model.SetViewTableModel.getColumnClass(SetViewTableModel.java:33)
	at javax.swing.JTable.getColumnClass(Unknown Source)
	at javax.swing.JTable.getCellRenderer(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
	at javax.swing.plaf.ComponentUI.update(Unknown Source)
	at javax.swing.JComponent.paintComponent(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JViewport.blitDoubleBuffered(Unknown Source)
	at javax.swing.JViewport.windowBlitPaint(Unknown Source)
	at javax.swing.JViewport.setViewPosition(Unknown Source)
	at javax.swing.plaf.basic.BasicScrollPaneUI$HSBChangeListener.stateChanged(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.fireStateChanged(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.setRangeProperties(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.setValue(Unknown Source)
	at javax.swing.JScrollBar.setValue(Unknown Source)
	at javax.swing.plaf.basic.BasicScrollBarUI.scrollByUnits(Unknown Source)
	at javax.swing.plaf.basic.BasicScrollBarUI.scrollByUnit(Unknown Source)
	at javax.swing.plaf.basic.BasicScrollBarUI$ArrowButtonListener.mousePressed(Unknown Source)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)


EDIT:

Es muss irgendwas mit der Art und Weise sein wie ich die Daten zusammenbaue. Wenn ich selbiges wie unten stehend manuell mache funtkzionierts.

Code:
				Object[][] data = {{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"},
						{"Bla", new Boolean(false), "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla", "Bla"}
				};
 

AlArenal

Top Contributor
Dann sind deine Daten pisse. Denn wenn es hier ne NPE gibt ".getColumnClass(SetViewTableModel.java:33) ", dann ja wohl weil #getValueAt null liefert und weil auf einem null schlecht #getClass aufgerufen werden kann.
 

daily

Aktives Mitglied
Es funktioniert!

Hab das Problem gefunden. Die Daten kommen ja aus einer Acces-Datenbank. Bei der Abfrage die ich erstelle entstehen beim Kommentar bzw. der Seriennummer teilweise Leerfelder. Diese Leerfelder werden beim einlesen aus dem ResultSet in das Object-Array als Null interpretiert und wandern genau so in die Tabelle. Hab nu nen kleinen Workarround geschrieben der aus Null einfach ein Leerzeichen macht. Und nun funktionierts :)

Vielleicht hilft das ja in Zukunft mal jemandem. Ich häng den Workarounf noch unten an. Wenn ich nu noch rausfinde wie ich die Größe eines Resultsets rausfinde ohne es zu durchlaufen bin ich dann mit de Teil auch fertig :D


Workaround
Code:
private class getSetContentController implements ActionListener {

		public void actionPerformed(ActionEvent anActionEvent) {
			try {
				SqlStatementWithArgs getSet = new GetSet();
				String[] args = { (String) setChoice_.getSelectedItem() };
				sets_ = getSet.getResult(con, args);

				Object[][] data = new Object[100][11];
				String[] tempArray = new String[11]; 
				
				int i = 0;
				if (sets_ != null) {
					while (sets_.next()) {
						for (int j=1; j<11;j++){
							tempArray[j]= sets_.getString(j);
						}
						
						for (int l = 0;l<11;l++){
							if (l==0) if (tempArray[l+1]==null) data[i][l] = " "; else data[i][l] = tempArray[l+1];
							else if(l==1) data[i][l] = new Boolean(false);
							else  if (tempArray[l-1]==null) data[i][l] = " "; else data[i][l] = tempArray[l-1];
							
						}
						i++;
					}
				}

				SetViewTableModel model = new SetViewTableModel();
				model.setData(data);
				contentTable_.setModel(model);
				contentTable_.getModel().fireTableStructureChanged();

			} catch (IllegalArgumentException x) {
				new ExceptionView(frame_, x);
			} catch (SQLException x) {
				new ExceptionView(frame_, x);
			} catch (NullPointerException x) {
				new ExceptionView(frame_, x);
			}
		}
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben