Zeilenmarkierung verschwindet nach repaint()

Status
Nicht offen für weitere Antworten.

Dit_

Bekanntes Mitglied
Hallo!

wenn meine Tabelle durch die Methode
Java:
fireTableDataChanged();
aktualisiert wird, dann verschwindet die Zeilenmarkierung, dh wenn die Tabelle alle 3 sec aktualisiert wird, bleibt die Zeile höchstens (wenn ich sie markiere) 3 sec markiert :/

Java:
{
			tabelleModell = new TabelleModell(false);
			tabelle= new JTable();
			tabelle.setModel(tabelleModell);
			tabelle.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tabelle.setColumnSelectionAllowed(false);
			tabelle.setRowSelectionAllowed(true);
			tabelle.setShowHorizontalLines(false);
			tabelle.setShowVerticalLines(false);
...
			

		}


Hat jemand ne idee wie ich das Problem lösen kann?

Ich hab mir gedacht die Aktualisierung durch
Java:
table.repaint()
zumachen... aber lieber fragen bevor ich die Klassen umschreibe...
 

Geeeee

Bekanntes Mitglied
Naja. Ein DatenChange könnte z.B. das Löschen der aktuellen Zeile sein oder so. Da ist das Verhalten schon passend. Als kleinen Workaround könntest du dir die Markierung merken (im Falle es existiert eine) und sie nach dem update wieder setzten. Könnte aber auch zu einen schönen Flackern (eben alle 3 sek) führen.
 

André Uhres

Top Contributor
Wir können JTable#prepareRenderer überschreiben und für die Zeilennummer, die wir uns und in einem MouseListener gemerkt haben, den gewünschten Background setzen.
 

Dit_

Bekanntes Mitglied
Danke André Uhres Idee verstanden :)

Brauche aber noch bissle Hilfe, soweit bin ich...
Java:
tabelle.addMouseListener(new MouseListener() {

				@Override
				// loslassen
				public void mouseReleased(MouseEvent e) {
				}

				@Override
				public void mousePressed(MouseEvent e) {

				}

				@Override
				public void mouseExited(MouseEvent e) {
				}

				@Override
				public void mouseEntered(MouseEvent e) {
				}

				@Override
				public void mouseClicked(MouseEvent e) {
					Point p = e.getPoint();// koordinate von klick
					ausgewaehlteZeile = tabelle.rowAtPoint(p); //int
					tabelle.prepareRenderer(???, ausgewaehlteZeile , ???);

				}
			});

also ich merke mir die Zeile, aber wie gehe ich weiter vor ? Soll ich eigene Klasse für diesen neuen Renderer schreiben? :rtfm:

Danke schon mal
 

André Uhres

Top Contributor
Die Methode prepareRenderer rufen wir nicht auf, sondern wir überschreiben sie nur. Beispiel:
Java:
tabelle = new JTable() {
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        c.setBackground(Color.WHITE);
        if (ausgewaehlteZeile == row) {
            c.setBackground(Color.LIGHT_GRAY);
        }
        return c;
    }
};
 

Dit_

Bekanntes Mitglied
ok, follgendes Problem. Ich habe eine ExtraKlasse mit dem Namen TabelleModel

Java:
public class TabelleModell extends AbstractTableModel {
...
}


wenn ich dein Beispiel da reinsetze, kommt FehlerMeldung "undefined for the type AbstractTableModel".
 

André Uhres

Top Contributor
Die Methode prepareRenderer gehört zur Tabelle und nicht zu seinem Model, denn sie soll nur die Darstellung verändern und nicht die Daten. Du kannst mein Beispiel kopieren, praktisch so wie es ist, und es einfach nur an der Stelle einfügen, wo die JTable erzeugt wird:
Java:
{
			tabelleModell = new TabelleModell(false);
			tabelle= new JTable();//<---diese Zeile kannst du löschen
            //<--------------------- Beispiel hier einfügen
			tabelle.setModel(tabelleModell);
			tabelle.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tabelle.setColumnSelectionAllowed(false);
			tabelle.setRowSelectionAllowed(true);
			tabelle.setShowHorizontalLines(false);
			tabelle.setShowVerticalLines(false);
...
			

		}
 
Zuletzt bearbeitet:

Dit_

Bekanntes Mitglied
ok danke sehr :) läuft.

nächste Frage
wenn ich eine Zeile auswähle, so wird die Auswahl durch die spalten unterbrochen, so dass die Zeile nicht durchgehend mit Blau markiert wird, sondern, wie gesagt durch die Spaltenlinien unterbrochen.


Java:
tabelle.setShowHorizontalLines(false);
			tabelle.setShowVerticalLines(false);
wie man sieht steht alles auf false ...
:shock:
 

André Uhres

Top Contributor
Mit [c]setShowVerticalLines(false)[/c] werden die Linien in der Hintergrundfarbe der JTable gemalt(*). Sie sind also immer noch da, obwohl man sie nicht sieht. Wenn wir dann die Hintergrundfarbe einzelner Zellen ändern, dann sieht man sie an diesen Stellen natürlich wieder :)
(*)sie werden nicht wirklich "gemalt", aber der Hintergrund kommt an ihren Stellen zum Vorschein.
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ähm also zum "Zeile merken": Was du ja jetzt machst ist lediglich eine Zeile anzumalen.. Sie ist im TableSelectionModel aber nicht ausgewählt. D.h. du gaukelst dem User nur vor, dass die Zeilen markiert ist, das ist sie aber nicht.
Angenommen du hast nen Button der etwas mit den Daten einer Zeile macht: Du würdest ne NullPointerException kriegen, weil nix angewählt ist, es sieht nur so aus..

Optische Dinge würde ich mit einem TableCellRenderer machen. Und für die Re-Selektion der zuletzt markierten Zeile nach einem Update solltest du das SelectionModel nutzen.
Ein Bsp, ohne Gewähr dass es zu 100% funktioniert, oder jetzt sonderlich "gut" ist. Das ist jetzt nur aus dem Kopf:

Java:
TabelleModel model = (TabelleModel ) table.getModel();
int modelIndex = tabelleModel.getDatenListe().indexOf(table.getSelectedObject()); // wie auch immer du rausfindest wo die Daten der Zeile in deinem Model sind
model.fireTableDataChanged();
int viewIndex = table.convertRowIndexToView(modelIndex);
table.getSelectionModel.setLeadSelection(viewIndex ,viewIndex );
// Falls dein Table in nem ScrollPane liegt, soll er zur Auswahl scrollen:
Rectangle cellRect = table.getCellRect(viewIndex, 0, false);
table.scrollRectToVisible(cellRect);
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
E Swing Text verschwindet AWT, Swing, JavaFX & SWT 1
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
javampir Java FX Text verschwindet nicht AWT, Swing, JavaFX & SWT 9
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
S LayoutManager TextField verschwindet / wird klein AWT, Swing, JavaFX & SWT 4
D Swing JOptionPane verschwindet beim 2. Aufruf einfach so?? AWT, Swing, JavaFX & SWT 2
J JPanel verschwindet... AWT, Swing, JavaFX & SWT 8
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
frankred Swing JMenu verschwindet nicht beim klicken ausserhalb des JMenu! AWT, Swing, JavaFX & SWT 4
P Swing Jtable mit Delete Button (Button verschwindet nicht bei Delete)) AWT, Swing, JavaFX & SWT 5
G Menü verschwindet durch .setText() AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
N JMenuBar verschwindet nicht nach ComponentEvent AWT, Swing, JavaFX & SWT 6
K 2D-Grafik Linie verschwindet beim Zeichnen AWT, Swing, JavaFX & SWT 10
S JCheckBoxMenuItem - Haekchen verschwindet bei Icon AWT, Swing, JavaFX & SWT 3
S Beim Painten auf JPanel verschwindet das Bild :( AWT, Swing, JavaFX & SWT 10
Iron Monkey SwingWorker verschwindet nicht AWT, Swing, JavaFX & SWT 10
O JPanel Zeichnung verschwindet AWT, Swing, JavaFX & SWT 4
F Zeichnung verschwindet bei Nutzung von einem Layout AWT, Swing, JavaFX & SWT 6
R JTable Headerbeschriftung verschwindet AWT, Swing, JavaFX & SWT 3
R Panel verschwindet AWT, Swing, JavaFX & SWT 2
P JTextArea text verschwindet bei mausklick AWT, Swing, JavaFX & SWT 5
R Bei JDialog verschwindet der Inhalt aus übergeordneten Frame AWT, Swing, JavaFX & SWT 2
X Durch DrawLine verschwindet das Fenster und die Objekte AWT, Swing, JavaFX & SWT 13
G Zeichnung verschwindet nach verändern der Fenstergröße. AWT, Swing, JavaFX & SWT 2
N WindowsLookAndFeel>JFrame/JDialogTitelleiste verschwindet AWT, Swing, JavaFX & SWT 4
K Zeichnung verschwindet. AWT, Swing, JavaFX & SWT 21
A gezeichnete Linie verschwindet, wenn ich JMenuBar öffne AWT, Swing, JavaFX & SWT 2
C Menue verschwindet hinter AWT-List Box.wie beheben? AWT, Swing, JavaFX & SWT 3
M JMenu verschwindet unter ScrollPane AWT, Swing, JavaFX & SWT 3
G wie verschwindet Konsole? AWT, Swing, JavaFX & SWT 3
V JDialog "verschwindet" beim umschalten in der Task AWT, Swing, JavaFX & SWT 9
R JFrame verschwindet sofort hiner dem Hauptframe AWT, Swing, JavaFX & SWT 9
M Menüleiste verschwindet AWT, Swing, JavaFX & SWT 6
H Hintergrundbild im Panel verschwindet sofort AWT, Swing, JavaFX & SWT 6
I Swing: Menü verschwindet beim Einfügen eines Bildes AWT, Swing, JavaFX & SWT 15
D DropDownSelection Box verschwindet hinter JTextArea AWT, Swing, JavaFX & SWT 2
Z bei kleinen Buttons verschwindet Schrift, obwohl Platz wäre AWT, Swing, JavaFX & SWT 5
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
VPChief Nach abspielen von Sound reagiert das Program nichtmehr AWT, Swing, JavaFX & SWT 9
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
S JavaFX Slider freezt nach Benutzung AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
F JavaFX Zustand der CheckMenuItems behalten nach Programmneustart AWT, Swing, JavaFX & SWT 7
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
MiMa Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben