Popoup Menü im JTable richtig anzeigen

Einen schönen guten Abend,

ich habe eine Frage an euch. Ich habe einen JTable, dessen Positionen (Reihen) mit unterschiedlichen Farben dargestelt werden.
Ich möchte ein Popup Menü bei Klick auf die rechte Maustaste erzeugen, und zwar abhängig davon, ob die Zeile farbig ist oder nicht.
Dazu habe ich eine Klasse "showPopup" geschrieben.

Und Ihr werdet es schon erraten. Funktioniert nicht so wie es soll.
Die Methode springt bei Rechtsklick auf eine weiße Zelle direkt in die zweite Bedingung und es wird das falsche Popup angezeigt, nämlich daß, welches für farbige Zellen gedacht ist.

Demnach wird die Bedingung >> if (c.getBackground() == null) << nicht richtig geprüft.
Zur Info, ich habe den betreffenen Zellen auch schon eine andere Farbe zur Prüfung zugeordnet und dann die Bedingung auf diese Farbe aufgerufen,
also if (c.getBackground() == Color.GREEN) <<
Gleiches Ergebniss.

Kann mir jemand nen Tipp geben wo der Fehler hängt?

Hier die Methode.

Dank euch

Code:
public class showPopup  extends MouseAdapter {

            @Override
            public void mouseClicked(MouseEvent e) {
                Component c = e.getComponent();
        
                
                 if (e.getButton() ==  MouseEvent.BUTTON3) { 
                    if (c.getBackground() == null) {
                        
                        c.add(rowBestPopup);
                        rowBestPopup.show(e.getComponent(), e.getX(), e.getY());
                    } else {
                    
                c.add(rowPopup);
                 rowPopup.show(e.getComponent(), e.getX(), e.getY());
                    }
                }
                
            }

            
            
         }
 
Kann mir jemand nen Tipp geben wo der Fehler hängt?
1. der Background ist nicht null
2. Color ist ein Referenztyp und die vergleicht man nicht per == sondern per equals (im Hintergrund wird z. B. oft ColorUIResource statt Color verwendet)
3. sich von der Farbe abhängig zu machen, erscheint mir wenig sinnvoll. Die Farbe ist ja in der Regel Ausdruck eines Zustands und da wäre es doch vernünftig, sich nach dem Zustand und nicht nach der Darstellung des Zustands zu richten.
 
Ja, die Farbe gibt den Status wieder. Ich habe die Bedingung jetzt an den Status geküpft und es funktionuiert,
Trotzdem finde ich es seltsam daß obiger Code nicht funktioniert. Denn selbst wenn ich null durch eine Farbe ersetzte wird das falsche Popup angezeigt.

Trotzdem vielen Dank
 
Ach, Du rufst die Hintergrundfarbe der Tabelle ab, brauchst aber die der Zelle. Hier müsstest Du über den CellRenderer gehen. Das ist erstens noch hässlicher und wie oben schon geschrieben: sinnvoll ist das sowieso nicht.

Java:
int col = table.columnAtPoint(e.getPoint());
int row = table.rowAtPoint(e.getPoint());
Color background = table.prepareRenderer(
        table.getCellRenderer(row, col), row, col).getBackground();
 
Ach, Du rufst die Hintergrundfarbe der Tabelle ab, brauchst aber die der Zelle. Hier müsstest Du über den CellRenderer gehen. Das ist erstens noch hässlicher und wie oben schon geschrieben: sinnvoll ist das sowieso nicht.

Java:
int col = table.columnAtPoint(e.getPoint());
int row = table.rowAtPoint(e.getPoint());
Color background = table.prepareRenderer(
        table.getCellRenderer(row, col), row, col).getBackground();
Danke.Verstanden ! Damit macht das Sinn, daß immer die selbe Farbe herauskommt. o_O
Ich denke aber auch, das war ne nicht so schlaue Idee über die Hintergrundfarbe zu gehen. Da hast du recht. Über den Status geht es einfacher.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben