JTable Zelle markieren von bis und Löschen

agasar

Mitglied
Hallo

ich habe mir eine JTable erstellt und möchte von einer bestimmten Zelle(row,column) bis zu einer anderen Zelle(row,column) markieren mit einer bestimmten farbe. Ich will sozusagen diese Zellen verknüpfen und als eine Einheit darstellen.

Der Programmablauf
Der User gibt ein anfangs und enddatum ein. Die JTable aktuallisiert ihre Tabelle mit den eingegebenen
Datum. Jetzt habe ich 2 Datum einträge in meiner Jtable aber ich möchte das von der Anfangsdatumzelle bis zur Enddatumzelle markiert wird.
Und ich möchte auch wenn ich auf diese markierte klicke löschen kann aus der jTable.

Ich komme nicht einfach weiter bitte um hilfe.
 

Michael...

Top Contributor
Der Zelleninhalt wird mit Hilfe von TableCellRenderern dargestellt. Man könnte hier also einen Renderer schreiben, der prüft, ob das Datum in der Zelle innerhalb des vorgegebenen Zeitintervalls liegt und diese ggf. einfärbt.
Was das Löschen angeht, sollen einzelne Zellen gelöscht werden? Also keine kompletten Zeilen oder Spalten? Da hängt die Komplexität von der Implementierung des TableModels ab. Mit einem passenden TableModel ist das recht einfach, mit einem DefaultModel müsstest Du ja die Zellwert nachrücklassen...
 

agasar

Mitglied
Danke für die Antwort

also ich hab bereits ein model für mein tabele implementiert von AbstractModel. Damit ich die Dateobjekte in meine Tabelle einfügen und wieder auslesen kann.
Mit der Klasse TableCellRenderer kenn ich mich nicht aus. Das interface verlangt das ich getTableCellRendererComponent(..) implementiert werden muss . Muss ich diese Überprüfungen der Intervalle hier machen .
Ich will den komplett markierten datensatz löschen aus der tabelle, also die markierte stelle im tabelle.
 

Michael...

Top Contributor
Mit der Klasse TableCellRenderer kenn ich mich nicht aus. Das interface verlangt das ich getTableCellRendererComponent(..) implementiert werden muss . Muss ich diese Überprüfungen der Intervalle hier machen .
Richtig, in dieser Methode wird die Zelle formatiert. Der Einfachheit halber kann man auch von DefaultTableCellRenderer erben (verwendet eine JLabel zum Rendern) und Methode anpassen.
Ich will den komplett markierten datensatz löschen aus der tabelle, also die markierte stelle im tabelle.
Nehme mal an es geht um so eine Art Kalender. Im Model muss man dann ja "nur" die Daten löschen die innerhalb des definierten Intervalls liegen.
Ich würde als Datencontainer im Model eine einfache Liste mit den Daten verwenden und die Tabelle damit zeilenweise befüllen, dann kann man einfach die betroffenen Daten aus der Liste löschen und ein fireTableDataChanged() abfeuern.
 

agasar

Mitglied
Ich habe im datenmodel eine hashmap verwendet.
public void setValueAt(Object value, int row, int column)
{
//int col = column;
//col = transform(column);

if ((rows < 0) || (columns < 0))
{
throw new IllegalArgumentException("Invalid row/column setting");
}
//if ((row < rows) && (column < columns))
//{
lookup.put(new Point(row,column), value);
//}
}
public Object getValueAt(int row, int column) {
return lookup.get(new Point(row,column));
}
Ich weis nicht wie ich die Intervalle im TableCellRenderer bekommen soll.
public void setValue(Object value)
Kannst du mir bitte weiterhelfen?
 

Michael...

Top Contributor
Du musst Dir ja nur das Anfangs- und Enddatum merken. Im Renderer überprüfst Du einfach nur ob das Datum der aktuellen Zelle dazwischen liegt.

Bzgl. TableModel vermute ich mal, dass die HashMap da garnicht notwendig ist und es eine einfache Liste auch tun würde. (Ich nehme mal an das die JTable als eine Art Kalendardarstellung dienen soll und die Werte einer Zeile nicht unbedingt einen Bezug zu einander haben)
Hier mal ein Beispiel (mit Zahlen anstelle von Daten) um zu verdeutlichen wie ich das meine:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class TableListDemo extends JFrame {
	private ListTableModel model;
	private int start, end;
	
	public TableListDemo() {
		List<Integer> data = new ArrayList<Integer>();
		for (int i=1; i<32; i++)
			data.add(i);
		model = new ListTableModel(data);
		JTable table = new JTable(model);
		this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
		JPanel panel = new JPanel(new GridLayout(1, 3));
		final JSpinner spinner1 = new JSpinner();
		final JSpinner spinner2 = new JSpinner();
		spinner1.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				start = Integer.parseInt(spinner1.getValue().toString());
				if (start <= end)
					model.fireTableDataChanged();
				else
					spinner2.setValue(start);
			}
		});
		panel.add(spinner1);
		spinner2.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				end = Integer.parseInt(spinner2.getValue().toString());
				if (end >= start)
					model.fireTableDataChanged();
				else
					spinner1.setValue(end);
			}
		});
		panel.add(spinner2);
		JButton button  = new JButton("DEL");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				model.removeIntervall(start, end);
			}
		});
		panel.add(button);
		this.getContentPane().add(panel, BorderLayout.SOUTH);
		table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
			public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
				super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
				if (value!=null) {
					int intValue = Integer.parseInt(value.toString());
					if (intValue>=start && intValue<=end)
						this.setBackground(Color.RED);
					else
						this.setBackground(Color.WHITE);
				}
				return this;
			}
		});
	}
	
	class ListTableModel extends AbstractTableModel {
		private List<Integer> data = new ArrayList<Integer>();
		
		public ListTableModel(List<Integer> data) {
			this.data = data;
		}
		
		public void removeIntervall(int start, int end) {
			for(int i = data.size()-1; i>=0; i--) {
				System.out.println(data.get(i));
				if (data.get(i)>=start && data.get(i)<=end)
					data.remove(i);
			}
			this.fireTableDataChanged();
		}

		public int getColumnCount() {
			return 7;
		}

		public int getRowCount() {
			return data.size()/getColumnCount() + (data.size()%getColumnCount()>0?1:0);
		}

		public Object getValueAt(int rowIndex, int columnIndex) {
			int index = rowIndex*getColumnCount() + columnIndex;
			if (index >= data.size())
				return null;
			return data.get(index);
		}
		
	}
	
	public static void main(String[] s) {
		JFrame frame = new TableListDemo();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(0, 0, 300, 300);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}
 

agasar

Mitglied
Danke für die antwort.
Kann man auch wie in ical über die jtable zellen mit der maus markieren und dann soll ein frame aufgehen das nach datum, wiederholung usw. einträgen fragt, wenn man mit ok bestätigt soll dann die entrsprechende zellen farblich gekennzeichnet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Zelle in JTable nach klick markieren AWT, Swing, JavaFX & SWT 2
G JTable-Zeile/Zelle markieren und mir Shortcut in Arbeitsspei AWT, Swing, JavaFX & SWT 3
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
M JTable: Prüfen ob Zelle leer ist AWT, Swing, JavaFX & SWT 5
O Swing JTable - Zelle fokussieren AWT, Swing, JavaFX & SWT 10
L JTable selektierte Zelle in Bearbeitungs Modus AWT, Swing, JavaFX & SWT 2
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
R Swing Hintergrundfarbe der Zelle in einer JTable bei Markierung AWT, Swing, JavaFX & SWT 2
M Jtable Objecte aus Zelle AWT, Swing, JavaFX & SWT 13
S Swing Zelle einer JTable hervorheben (ohne CellRenderer) AWT, Swing, JavaFX & SWT 3
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
O JButton in Zelle von JTable AWT, Swing, JavaFX & SWT 4
J Zelle eine JTable ändern AWT, Swing, JavaFX & SWT 3
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
T JTable, Popup Fester per Rechtsklick auf Zelle AWT, Swing, JavaFX & SWT 19
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
C Swing JTable zeigt in jeder Zelle einer Reihe denselben Inhalt AWT, Swing, JavaFX & SWT 2
lenniii Zelle in JTable ändern AWT, Swing, JavaFX & SWT 2
J Swing JTable, jede Zelle ein anderer Title im TitledBorder AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
C Swing JTable Zelle mit Einfachklick editieren AWT, Swing, JavaFX & SWT 3
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
T Swing JTable - true zurückbekommen, wenn der Cursor in einer Zelle blinkt AWT, Swing, JavaFX & SWT 7
C JTable markierte Zelle wird bei removeRow nicht mit gelöscht AWT, Swing, JavaFX & SWT 6
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
A JTable Zelle Padding AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
S Swing DnD: Wie finde ich heraus, von welcher Zelle aus im JTable der Drag gestartet wurde? AWT, Swing, JavaFX & SWT 3
O JTable Zelle mit "ENTER" in Editmode setzen AWT, Swing, JavaFX & SWT 4
eskimo328 JTable nächste Zelle nach Eingabe einer Ziffer AWT, Swing, JavaFX & SWT 5
B Swing Einzelne Zelle in JTable soll NICHT auswählbar sein AWT, Swing, JavaFX & SWT 9
A Swing JTable Icon nur in einer Zelle AWT, Swing, JavaFX & SWT 2
B Swing JTable merkt sich die zuletzt selektierte Zelle AWT, Swing, JavaFX & SWT 3
T einzelne Zelle einer JTable auswählen und Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
M JTable - verlassen einer Zelle AWT, Swing, JavaFX & SWT 15
R JTable Darstellen der selektierten Zelle braucht lange AWT, Swing, JavaFX & SWT 7
S JTable Probleme wenn ich Zelle verlasse AWT, Swing, JavaFX & SWT 4
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
W MouseListener für jede Zelle einer JTable AWT, Swing, JavaFX & SWT 4
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
G jTable, spezille Zelle automatisch füllen AWT, Swing, JavaFX & SWT 13
J JTable: Einzelne Zelle selektieren AWT, Swing, JavaFX & SWT 6
T JPanel in JTable Zelle adden AWT, Swing, JavaFX & SWT 7
T JTable-Zelle mittels JFileChooser befüllen AWT, Swing, JavaFX & SWT 5
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
N JTable: Informiert werden, wenn User eine Zelle editiert hat AWT, Swing, JavaFX & SWT 2
M JTable: Editieren einer Zelle "von außen" abbreche AWT, Swing, JavaFX & SWT 2
M JTable Zelle ändern -> andere Zellen mit ändern AWT, Swing, JavaFX & SWT 5
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
S Eine Zeile zu einer JTable hinzufügen wo Zelle selektiert is AWT, Swing, JavaFX & SWT 4
M JTable Zelle editieren AWT, Swing, JavaFX & SWT 2
S jTable Font einer Zelle ändern AWT, Swing, JavaFX & SWT 5
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
V JTable Zelle über befehl "selecten"? AWT, Swing, JavaFX & SWT 5
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
S Farbe einer Zelle in JTable ändern AWT, Swing, JavaFX & SWT 13
J JList-Item ind JTable-Zelle auswählen. AWT, Swing, JavaFX & SWT 5
R JTable: Jede Zelle mit eigenem ToolTip belegen AWT, Swing, JavaFX & SWT 5
R Drag & Drop einer einzelnen Zelle (JTable) AWT, Swing, JavaFX & SWT 2
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
V JTable: Bei Klick in Zelle -> Ganze Zeile markeiren AWT, Swing, JavaFX & SWT 7
W JTable und mehrere Components in einer Zelle AWT, Swing, JavaFX & SWT 4
S JTree in einer JTable-Zelle AWT, Swing, JavaFX & SWT 6
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
W Problem/Absturz bei Zelle nicht editierbar setzen (JTable) AWT, Swing, JavaFX & SWT 6
R JTable - Boolean-Wert aus Zelle auslesen. AWT, Swing, JavaFX & SWT 9
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
G JTable Zeilenumbruch innerhalb einer Zelle bzw. columnHeader AWT, Swing, JavaFX & SWT 1
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben