tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1224
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mas666 mas666 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    57
    Hallo zusammen,

    Ich habe eine JTable in derer erster Spalte ein String dargestellt wird, der einen Eintrag aus einer JComboBox repräsentiert. Wenn ich die entsprechende Zelle anklicke, wird die JComboBox angezeigt und ich kann einen Eintrag wählen.

    So weit so gut.

    Nun hätte ich es aber gerne, dass, wenn eine solche Zelle angewählt wird, automatisch der bisher gewählte Eintrag in der JComboBox angewählt ist.

    Meine Tabelle erbt von JTable, der Editor für die JComboBox ist der DefaultEditor, das Model erbt von AbstractTableModel und ist selber implementiert.

    Irgendwie bekomme ich das nicht hin. Hat mir jemand einen Typ?

    Danke im Voraus, Gruss
    mas
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    poste doch mal den Code von der Passage, bei der Dein Eintrag übernommen werden soll !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    mas666 mas666 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    57
    Hey vfl_freak, danke für Deine Antwort, here you go:

    Im JPanel wo die Tabelle angezeigt wird, setze ich den Editor für die entsprechende Spalte.

    Code java:
    1
    
    table.getColumnModel().getColumn(KeypadConstants.COLUMN___TYPE).setCellEditor(new CustomComboBoxCellEditor(KeypadConstants.KE_COM_TYP));
    Natürlich wird hier die ganze JTable noch "konfiguriert" Model wird gesetzt, Listeners und Renderer hinzugefügt, usw.

    Der Editor ist (nicht wie vorhin geschwindelt) angepasst, die Anpassungen sind jedoch minim, ergo unwichtig.

    Die Klasse CustomComboBoxCellEditor:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    import java.awt.event.MouseEvent;
    import java.util.EventObject;
     
    import javax.swing.DefaultCellEditor;
    import javax.swing.JComboBox;
     
    public class CustomComboBoxCellEditor extends DefaultCellEditor {
     
        public CustomComboBoxCellEditor(JComboBox obj) {
            super(obj);
        }
        
        @Override
        public boolean isCellEditable(EventObject evt) {
            if (evt instanceof MouseEvent) {
                int clickCount;
     
                // For single-click activation
                //clickCount = 1;
     
                // For double-click activation
                clickCount = 2;
     
                // For triple-click activation
                //clickCount = 3;
     
                return ((MouseEvent)evt).getClickCount() >= clickCount;
            }
            return true;
        }
    }

    Dann wird mit der Methode setValueAt in meinem TableModel der neue Wert gesetzt. (Auszug aus der Methode)

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
        @Override
        public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) {
            final KeypadEntry keypadEntry = keypad.getLine( rowIndex );
            
            switch( columnIndex ){
            case KeypadConstants.COLUMN___TYPE:     // TYP
                final KeypadType newType = (KeypadType)aValue;
                keypadEntry.setType( newType );
                break;
            }
            fireTableCellUpdated(rowIndex, columnIndex);
        }

    Was mir fehlt, ist der Schritt dazwischen. Im Moment, wo die Zelle in den "Editier-Modus" geht, müsste ich den entsprechenden index der JComboBox anwählen.

    Danke für jeden Tipp, Gruss
    mas
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    ich fürchte, ich verstehe jetzt die Frage nicht so ganz ....

    Nun hätte ich es aber gerne, dass, wenn eine solche Zelle angewählt wird, automatisch der bisher gewählte Eintrag in der JComboBox angewählt ist.
    Meinst Du, schon dann, wenn Du nur auf die Zeile klickst oder erst wenn Du (beim Doppeklick?) die ComboBox öffnest?

    Eigentlich sollte es doch reichen, dies beim Öffnen zu tun, oder ?

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    mas666 mas666 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    57
    Also ich habe folgendes Problem:
    - Ich Klicke die Zelle an (Doppelklick)
    - Der Dropdown öffnet sich.
    - Kein Eintrag ist angewählt

    Was ich möchte:
    - Ich Klicke die Zelle an (Doppelklick)
    - Der Dropdown öffnet sich.
    - Der zuvor selektierte Eintrag ist angewählt

    Ich vermute es funktiniert nicht, weil:
    - Der Dropdown in jeder Zeile der Tabelle verfügbar ist?
    - Die comboBox als Singleton implementiert ist?
    - Die Elemente der ComboBox Objekte sind, der dargestellte Wert aber ein String?

    Was ich suche:
    - Einen Listener oder etwas ähnliches, das ausgelöst wird, wenn ich beginne zu editieren (Also just bevor die ComboBox sich öffnet), um den gewählten Eintrag zu setzen.

    Ich hoffe, das macht das Problem klar.

    Gruss
    mas
     

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,
    Zitat Zitat von mas666 Beitrag anzeigen
    Was ich möchte:
    - Ich Klicke die Zelle an (Doppelklick)
    - Der Dropdown öffnet sich.
    - Der zuvor selektierte Eintrag ist angewählt
    ok, so wie ich es auch vermutet hatte ....

    Zitat Zitat von mas666 Beitrag anzeigen
    Ich vermute es funktiniert nicht, weil:
    - Der Dropdown in jeder Zeile der Tabelle verfügbar ist?
    - Die comboBox als Singleton implementiert ist?
    - Die Elemente der ComboBox Objekte sind, der dargestellte Wert aber ein String?
    Was heißt "der Dropdowm ist in JEDER Zelle verfügbar"?
    Ich denke, nur in der ersten .....
    Das es am Singleton liegt, glaub ich eher weniger, der verhindert ja nur, dass von einer Klasse mehr als ein Objekt erzeugt werden kann. Oder versuchst Du etwa jedesmal eine neue ComboBox zu erzeugen ?


    Zitat Zitat von mas666 Beitrag anzeigen
    Was ich suche:
    - Einen Listener oder etwas ähnliches, das ausgelöst wird, wenn ich beginne zu editieren (Also just bevor die ComboBox sich öffnet), um den gewählten Eintrag zu setzen.
    Ist mir nicht bekannt! Es gibt aber doch für die ComboBox den einfachen Befehl "setSelectedIndex", dem Du nur eine Integer für den gewünschten Index mitgeben musst!

    Ich würde einfach an der Stelle, wo Du den Doppelklick prüfst, hier entsprechend dem String in der ersten Spalte über eine Zuordnung den gewünschten Index zu übergeben!

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    mas666 mas666 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    57
    Zitat Zitat von vfl_freak
    Was heißt "der Dropdowm ist in JEDER Zelle verfügbar"?
    Ich denke, nur in der ersten .....
    In jeder ZEILE, nicht in jeder Zelle.

    Zitat Zitat von vfl_freak
    Ist mir nicht bekannt! Es gibt aber doch für die ComboBox den einfachen Befehl "setSelectedIndex", dem Du nur eine Integer für den gewünschten Index mitgeben musst!
    Genau! Aber WO, mache ich das? Das war von beginn weg meine Frage. WIE fange ich das Ereignis ab: "Jetzt wird diese Tabellenzelle bearbeitet"?


    Zitat Zitat von vfl_freak
    Ich würde einfach an der Stelle, wo Du den Doppelklick prüfst, hier entsprechend dem String in der ersten Spalte über eine Zuordnung den gewünschten Index zu übergeben!
    Keine schlechte Idee. Ich schaus mir an, danke!

    Gruss
    mas
     

Ähnliche Themen

  1. JComboBox in JTable
    Von RalU im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 22.12.09, 16:52
  2. JComboBox-Zeilen in JTable
    Von KPMAnakha im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 02.11.09, 14:44
  3. JComboBox in JTable: Verhalten bei editieren
    Von mas666 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 16.04.09, 10:45
  4. Antworten: 3
    Letzter Beitrag: 31.07.06, 16:00
  5. JComboBox in JTable
    Von himbeer im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 12.01.05, 16:54

Stichworte