tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
187
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    barsiq barsiq ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Ort
    Aachen
    Beiträge
    45
    Hallo,

    ich habe folgendes vor:

    In jeder Zelle einer einspaltigen Tabelle ist ein mehrzeiliger Text und Button.
    Der Renderer ist ein JComponent und hat also n JLabels und 1 JButton.

    Nun muss der Klick in die Zelle (Background und Labels) Action X auslösen, der Buttonklick jedoch Action Y.

    Wie sieht denn ein CellEditor für so einen Fall aus?
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,

    also ich würde vorschlagen, dass du einfach einen Selectionlistener auf die JTable legst, dadurch bekommst du dann die jeweilige Row. (Aktion x)
    Um nun ein Event über den Button abzufeuern, kannst du diesen einfach vorher definieren und einen ActionListener setzen. (Aktion y)

    Viele Grüße

    Sporticus
     

  3. #3
    barsiq barsiq ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Ort
    Aachen
    Beiträge
    45
    Also ich habe es ein wenig umgebaut, da ich dachte das Problem verstanden zu haben.

    Also, JTable list (hehe) ist einspaltig und hat ein Model das in der getValueAt einen JComponent als Rückgabewert liefert. Dieses Component (weiter - Wrapper) ist dann mit mehreren Labels und einem Button versehen.

    Der Renderer der Tabelle kümmert sich nur um Farben des Wrappers.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            DHPEVDOperationWrapper wrapper = (DHPEVDOperationWrapper)value; 
            // Hintergrund und Vordergrundfarben
            if (isSelected){ // Wenn selektiert
                wrapper.setForeground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getSelectedForegroundColor());
                wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getSelectedBackgroundColor());
            }
            else{ //    Sonst
                if (row%2 != 0) // gerade
                    wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getLineOddColor());
                else  //    ungerade
                    wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getLineEvenColor());
                wrapper.setForeground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getTextColor()); 
            }
            return wrapper;
        }

    Der Editor sieht so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    public class DHPScenarioListEditor extends AbstractCellEditor implements TableCellEditor {
        
        private static final long serialVersionUID = 920103338796844890L;
     
        @Override
        public Object getCellEditorValue() {
            System.err.println("Editor.getCellEditorValue");
            return null;
        }
     
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            System.err.println("Editor an [" + row + ":" + column + "]");
            return (Component)table.getValueAt(row, column);
        }
     
    }

    Diese Ausgaben vom CellEditor sehe ich abe nie.
    Der Editor wird dabei wie folgt gesetzt:
    Code :
    1
    2
    
            list.setCellEditor(new DHPScenarioListEditor());
            list.getColumnModel().getColumn(0).setCellEditor(new DHPScenarioListEditor());

    Trotzdem scheint es nicht zu greifen.

    Was mache ich da falsch?
     

  4. #4
    barsiq barsiq ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Ort
    Aachen
    Beiträge
    45
    Problem gelöst, habe im Model vergessen, isCellEditable zu überschreiben.
     

Ähnliche Themen

  1. JTable: CellEditor pro Zelle anstatt pro Spalte?
    Von Ceppi im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 12.04.11, 22:06
  2. JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an
    Von ElJarno im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 30.07.10, 08:53
  3. Probleme mit CellEditor
    Von TMDolphin im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 18.01.09, 09:17
  4. CellEditor
    Von darksmilie im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 29.08.06, 16:22
  5. JTable CellEditor editingCanceled
    Von nils_eckert im Forum Java
    Antworten: 0
    Letzter Beitrag: 30.01.05, 20:08

Stichworte