Schreibschutz eines JTable

Status
Nicht offen für weitere Antworten.

uxilator

Mitglied
Hallo,

weiß jemand vielleicht wie ich einen Schreibschutz auf eine JTable lege.

SetEnabled(false) kann ich übrigens nicht benutzen da es schon möglich sein soll Zeilen auszuwählen.
Die Zelleninhalte dürfen halt nur nicht verändert werden.

Danke Axel
 

abollm

Top Contributor
uxilator hat gesagt.:
Hallo,

weiß jemand vielleicht wie ich einen Schreibschutz auf eine JTable lege.

SetEnabled(false) kann ich übrigens nicht benutzen da es schon möglich sein soll Zeilen auszuwählen.
Die Zelleninhalte dürfen halt nur nicht verändert werden.

Danke Axel

Das so genannte Table model hat eine Methode, die du in diesem Fall überschreiben musst, um zu steuern welche Spalten oder Zellen nicht edierbar sein sollen, z.B.

Code:
public boolean isCellEditable(row, col)
...

Diese Methode sollte dann "true" oder "false" zurückliefern, je nachdem ob das von dir gewünscht (true -> edierbar) ist oder nicht.

Hdh
 

abollm

Top Contributor
Damit das Ganze nicht so trocken ist, hier einmal ein Beispiel einer JTable (mit eigenem TabelModel), bei der die erste Zeile nicht, die anderen aber edierbar sind:
Code:
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.*;

public class JTable01 {
	public static void main(String[] a) {
		new JTable01().create();
	}

	private void create() {
		int cols = 9;
		int rows = 5;

		Vector data = new Vector();
		Vector header = new Vector();
		header.add("Spalte 1");
		header.add("Spalte 2");
		header.add("Spalte 3");
		header.add("Spalte 4");
		header.add("Spalte 5");
		header.add("Spalte 6");
		header.add("Spalte 7");
		header.add("Spalte 8");
		header.add("Spalte 9");

		TableModel tableModel = new TableModel(data, header);

		Object[] objData = new Object[cols];
		for (int c = 0; c < cols; c++)
			objData[c] = "";

		JTable ivjScrollPaneTable = new JTable(tableModel, new ColModel());
		for (int c = 0; c < rows; c++)
			tableModel.addNewRow(objData);

		/*
		 * ivjScrollPaneTable.setAutoCreateColumnsFromModel(false);
		 * createColumns(cols,ivjScrollPaneTable);
		 */

		ivjScrollPaneTable.setAutoCreateColumnsFromModel(true);// entweder diesen oder den
		// obigen, auskommentierten 
		// nehmen

		JFrame f = new JFrame();
		JPanel p = new JPanel(new BorderLayout());
		p.add(new JScrollPane(ivjScrollPaneTable), BorderLayout.CENTER);
		f.setContentPane(p);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		p.setPreferredSize(new Dimension(600, 100));
		f.setLocation(150, 150);
		f.pack();
		f.setVisible(true);
	}

	private void createColumns(int col, JTable ivjScrollPaneTable) {
		for (int iCtr = 0; iCtr < col; iCtr++) {
			TableColumn column = new TableColumn(iCtr);
			column.setPreferredWidth(100);

			//column.setHeaderValue((Object) ("Profil " + (iCtr + 1)));

			ivjScrollPaneTable.addColumn(column);
		}
	}

	class ColModel extends DefaultTableColumnModel {
		public ColModel() {
			super();
		}

		public void addColumn(TableColumn tablcol) {
			super.addColumn(tablcol);
		}
	}

	class TableModel extends DefaultTableModel {
		public TableModel(Vector data, Vector header) {
			super(data, header);
		}

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

		public void addNewRow(Object[] objData) {
			addRow(objData);
		}

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

comp89

Bekanntes Mitglied
ich glaube er meinte, man soll die zeile anwählen können (markieren können), um z.b. den inhalt oder so zu bekommen, aber man soll die daten in der tabelle nicht verändern können

das würde mich auch interessieren, das lässt sich auch in mein programm einbauen, früher oder später hätte ich eh gefragt
 

abollm

Top Contributor
comp89 hat gesagt.:
ich glaube er meinte, man soll die zeile anwählen können (markieren können), um z.b. den inhalt oder so zu bekommen, aber man soll die daten in der tabelle nicht verändern können

das würde mich auch interessieren, das lässt sich auch in mein programm einbauen, früher oder später hätte ich eh gefragt

Also, mindestens dich interessiert es, wie man eine Zeile mit einem Schreibschutz so versehen kann, dass man zwar die einzelnen Zellenwerte in der Zeile lesen aber eben nicht verändern, sprich überschreiben, kann.

Im Prinzp habe ich dafür schon die Lösung, muss aber noch den Code kurz zusammenbauen, dann poste ich ihn hier, ok?
 
B

bygones

Gast
hä ? ist es schon zu spät und ich check nix mehr...

ihr wollt nur dass die Werte der Tabelle nicht geändert werden dürfen, man soll aber noch alles auswählen können ?

Dafür ist doch schon die Antwort gegeben: isCellEditable muss einfach false zurückgeben....
 

abollm

Top Contributor
Anonymous hat gesagt.:
...
machst du das jetzt noch?

Ja. leider habe ich noch nicht meinen prinzipiellen Ansatz umsetzen können. Dauert doch länger als gedacht, bzw. bisher habe ich die dafür notwendige Zeit noch nicht gefunden.
Das erinnert mich wieder an den kürzesten Entwicklerwitz. Kennst du den?
 

comp89

Bekanntes Mitglied
nein wie geht er,

ja dbac genau das wollen wir, stell dir excel vor und du markierst etwas aber es ist ein schreibschutz drauf, dass du es nicht ändern kannst
 

abollm

Top Contributor
comp89 hat gesagt.:
nein wie geht er,

Der kürzeste Entwicklerwitz -> "Das haben wir gleich."

Ich hatte/habe es mir so vorgestellt, dass man die Werte z.B. in der ersten Zeile markieren und damit letztlich auch edieren kann, aber in dem Moment wo man die betr. Zelle verlässt, wird der Ausgangswert wieder in die Zelle geschrieben.
 

abollm

Top Contributor
Nun haben "wir" es aber (hoffentlich):

Code:
/*
 * Created on 21.12.2004
 *
 * @author ABollm
 * 
 */

import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.util.*;

public class JTableReadOnlyDemo extends JTable {

	static String[] names = { "A", "B" };

	static Object[][] data = { { "Bleibt stehen, d.h. wird nicht", " aktualisiert nach Verlassen!" }, 
			                   { "kann geändert", "werden" },
							   { "kann geändert", "werden" },
							   { "kann geändert", "werden" },
							   { "kann geändert", "werden" }};

	static Hashtable hash = new Hashtable();

	class myModel extends AbstractTableModel {
		public int getColumnCount() {
			return names.length;
		}

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

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

		public String getColumnName(int column) {
			return names[column];
		}

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

		public boolean isCellEditable(int row, int col) {
			return true;
		}

		public void setValueAt(Object aValue, int row, int column) {
			String key = new String(row + "|" + column+ " ");
			if (hash.get(key) != null) {
				System.out.println("Existiert bereits");
				hash.remove(key);
				hash.put(key, " geändert");
			} else {
				System.out.println("Erstmals");
				hash.put(key, " geändert");
			}
			if (row >= 1)
				data[row][column] = aValue;
			System.out.println("Dieser Wert wurde geändert - Zeile: " + row + " - Spalte:" + column);
			System.out.println(hash);
		}
	};

	public JTableReadOnlyDemo() {
		super(data, names);
		dataModel = new myModel();
		this.setModel(dataModel);
		setRowSelectionAllowed(false);
		setCellSelectionEnabled(true);
		this.setRowHeight(20);
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame("Demo für Nur-Lesen-Zeile -> Zeile 0");
		JTableReadOnlyDemo table = new JTableReadOnlyDemo();
		JScrollPane scrollPane = new JScrollPane(table);
		frame.getContentPane().setLayout(new BorderLayout());
		frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
		frame.setSize(new Dimension(640, 150));
		frame.setVisible(true);
	}
}
 
B

bygones

Gast
abollm hat gesagt.:
Ich hatte/habe es mir so vorgestellt, dass man die Werte z.B. in der ersten Zeile markieren und damit letztlich auch edieren kann, aber in dem Moment wo man die betr. Zelle verlässt, wird der Ausgangswert wieder in die Zelle geschrieben.
sry - das halte ich aber nicht für sehr user freundlich... entweder erlaube ich das Ändern oder nicht... Ändern lassen und dann einfach wieder überschreiben find ich sinnlos
 

abollm

Top Contributor
deathbyaclown hat gesagt.:
abollm hat gesagt.:
Ich hatte/habe es mir so vorgestellt, dass man die Werte z.B. in der ersten Zeile markieren und damit letztlich auch edieren kann, aber in dem Moment wo man die betr. Zelle verlässt, wird der Ausgangswert wieder in die Zelle geschrieben.
sry - das halte ich aber nicht für sehr user freundlich... entweder erlaube ich das Ändern oder nicht... Ändern lassen und dann einfach wieder überschreiben find ich sinnlos

Dafür musst du dich ja nun nicht entschuldigen. Aber im Ernst: Wenn du die Anforderung hast, dass ein Zelle oder von mir aus eine ganze Zeile oder Spalte in einer JTable edierbar sein soll (also lesbar), ohne dass du den Wert durch deinen Ediervorgang überschreiben darfst, was machst du dann?

Meine oben gepostete Lösung ist sicherlich nicht der "Brüller", aber es funktioniert und darauf kommt es an. Halt eine typische Quick-and-Dirty-Lösung.

Anwendungsbeispiel wäre z.B. in solchen Tabellen gegeben, wo du bestimmte Zellenwerte mitunter einfach per Copy und Paste anderweitig zwingend benötigst. Mir fällt da z.B. der SQL-Navigator von Quest ein: Wenn du mit dem den kompletten Inhalt eine DB-Tabelle in ein Grid ausliest und du als Nutzer nur Lese-Rechte auf dieser Tabelle hast, dann hindert dich zunächst keiner, bestimmte Zellen- oder Grid-Werte per Markieren und Kopieren/Ausschneiden zu lesen und/oder sogar zu verändern. Erst in dem Moment, wo du irrtümlich versuchen solltest, deine Änderungen in die DB durchzuschreiben, erhältst du von der Applikation einen Hinweis, dass deine Änderungen nicht durchgeschrieben werden und der alte Wert wird wieder in die Zelle zurückgeschrieben. Das entspricht praktisch der Anforderung, die Ausgangspunkt für den von mir geposteten Code war.

Ansonsten aber macht so ein Vorgehen natürlich wirklich nicht viel Sinn, da kann ich dir nur rechtgeben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JTable schreibschutz setzen bzw. aufheben AWT, Swing, JavaFX & SWT 2
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
C AWT die X koordinate eines Rectangles herrausfinden AWT, Swing, JavaFX & SWT 14
G 2D-Grafik Umrandung eines Winkels (drawArc(..)) AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
U Größe eines Button im Menü ändern AWT, Swing, JavaFX & SWT 1
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
B 2D-Grafik Shade eines Images AWT, Swing, JavaFX & SWT 1
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Submit eines HTML-Formulars in Vaadin AWT, Swing, JavaFX & SWT 3
C Swing Durch Inhaltsänderung eines JTextfields eine Funktion aufrufen AWT, Swing, JavaFX & SWT 5
G LookAndFeel Tutorial für Erstellung eines eigenen Look And Feel AWT, Swing, JavaFX & SWT 3
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben