Einzelne Zeile in jTable selektieren klappt nicht :-(

vfl_freak

Premium-User
Moin zusammen,

ich habe in einer Anwendung div. Reiter mit jeweils eigenen Tables.
Dort werden u. a. weitere Anwendungen (Clients) und ihre Lizenzen verwaltet. Zu jeder Client-Tabelle gehört immer eine entsprechende Lizenz-Tabelle.

Während man nun in den Lizenz-Tabelle lustig per Mouseclick einzelne Zeilen markieren kann, klappt dies in den Client-Tabellen leider nicht. Dort bekomme ich rein gar nix markiert … :-(

Hier mal ein Code, bei dem es funktioniert
Java:
  private void createTableWorkerLiz()
   {
       m_DataReportWorkerLizenzen = new LicenseDBWorkerDataReport( this );
       m_TableWorkerLizenzen = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtable']JTable[/URL]();
       m_TableWorkerLizenzen.setAutoCreateColumnsFromModel( false );
       m_TableWorkerLizenzen.setModel( m_DataReportWorkerLizenzen );
       for( int spalte = 0; spalte < LicenseDBWorkerDataReport.m_columns.length; spalte++ )
       {
           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecellrenderer']TableCellRenderer[/URL] renderer;
           switch( spalte )
           {
               case LicenseDBWorkerDataReport.COL_AKTIV:
               case LicenseDBWorkerDataReport.COL_FEATUREPUTONHOLD:
        // und weitere ...
               {
                   renderer = new CheckCellRenderer();
                   break;
               }

               case LicenseDBWorkerDataReport.COL_BTNEDIT:
               case LicenseDBWorkerDataReport.COL_BTNDELETE:
               {
                   renderer = new LicenseDBButtonRenderer();
                   break;
               }

               default:
               {
                   ColoredLicenseTableCellRenderer ctr = new ColoredLicenseTableCellRenderer();
                   ctr.setHorizontalAlignment( LicenseDBWorkerDataReport.m_columns[spalte].m_alignment );
                   renderer = ctr;
               }
           } // switch

           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecelleditor']TableCellEditor[/URL] editor = null;
           switch( spalte )
           {
               case LicenseDBWorkerDataReport.COL_AKTIV:
               {
                   [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL] cbActive = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL]();
                   cbActive.setHorizontalAlignment( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL].CENTER );
                   cbActive.setBackground( m_TableWorkerLizenzen.getBackground() );
                   editor = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL]( cbActive );
                   (([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL])editor).setClickCountToStart( 2 );
                   cbActive.addActionListener( new mainFrame_jCheckBoxWorkerLicenseActive_actionAdapter(this) );
                   break;
               }
        // weitere cases für alle Spalten
               case LicenseDBWorkerDataReport.COL_BTNEDIT:
               case LicenseDBWorkerDataReport.COL_BTNDELETE:
               {
                   editor = new LicenseDBButtonEditor( this, new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL](), "Push me!", "Ouch", LT_WORKER );
                   editor.addCellEditorListener( new LicenseDBCellListener(m_TableWorkerLizenzen,spalte,"Side A","Side B") );
                   break;
               }

               default:
                   editor = null;
           } // switch

           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecolumn']TableColumn[/URL] column = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecolumn']TableColumn[/URL]( spalte, LicenseDBWorkerDataReport.m_columns[spalte].m_width, renderer, editor );
           column.setHeaderRenderer( createDefaultRenderer() );
           m_TableWorkerLizenzen.addColumn( column );
       } // for

       [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtableheader']JTableHeader[/URL] headerWorker = m_TableWorkerLizenzen.getTableHeader();
       headerWorker.setUpdateTableInRealTime( true );
       headerWorker.addMouseListener( new WorkerLizenzColumnListener() );
       headerWorker.setReorderingAllowed( true );
       spnWorkerLizenzen.getViewport().add( m_TableWorkerLizenzen );

       rowHeaderTableWorkerLizenzen = new JList<Object>( new TableListModel(m_TableWorkerLizenzen) );
       rowHeaderTableWorkerLizenzen.setFixedCellWidth( 30 );
       rowHeaderTableWorkerLizenzen.setBackground( spnWorkerLizenzen.getBackground() );
       rowHeaderTableWorkerLizenzen.setFixedCellHeight( m_TableWorkerLizenzen.getRowHeight() );
       rowHeaderTableWorkerLizenzen.setCellRenderer( new RowHeaderRenderer(m_TableWorkerLizenzen) );
       rowHeaderTableWorkerLizenzen.addMouseListener( new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseadapter']MouseAdapter[/URL]()
       {
           public void mouseClicked( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseevent']MouseEvent[/URL] e )
           {
               int index = rowHeaderTableWorkerLizenzen.locationToIndex( e.getPoint() );
               m_TableWorkerLizenzen.setRowSelectionInterval( index, index );
               m_TableWorkerLizenzen.requestFocus();
           }
       });
       spnWorkerLizenzen.setRowHeaderView( rowHeaderTableWorkerLizenzen );
       rowHeaderTableWorkerLizenzen.repaint();
   } // createTableWorkerLiz

hier der Code der zugehörigen Tabelle, bei der es nicht klappt:
Java:
    /**
    * @brief Erzeugt eine JTable für den Reiter <tt>Worker</tt> und fügt sie in das zugehörige Panel ein
    */
   private void createTableWorker()
   {
       m_DataReportWorker = new WorkerDataReport( this, LT_WORKER );
       m_TableWorker = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtable']JTable[/URL]();
       m_TableWorker.setAutoCreateColumnsFromModel( false );
       m_TableWorker.setModel( m_DataReportWorker );

    // #######################################################
    // ##### diese drei Zeilen habe ich neu eingefügt !! #####
       m_TableWorker.setSelectionMode( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+listselectionmodel']ListSelectionModel[/URL].SINGLE_INTERVAL_SELECTION );
       m_TableWorker.setColumnSelectionAllowed( false );
       m_TableWorker.setRowSelectionAllowed( true );
    // #######################################################

       for( int k = 0; k < WorkerDataReport.m_columns.length; k++ )
       {
           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecellrenderer']TableCellRenderer[/URL] renderer;
           if( k == WorkerDataReport.COL_LICENSE_AKTIV )
           {
               renderer = new CheckCellRenderer();
           }
           else
           {
               ColoredWorkerTableCellRenderer ctr = new ColoredWorkerTableCellRenderer();
               ctr.setHorizontalAlignment( WorkerDataReport.m_columns[k].m_alignment );
               renderer = ctr;
           }

           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecelleditor']TableCellEditor[/URL] editor;
           if( k == WorkerDataReport.COL_LICENSE_AKTIV )
           {
               [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL] cbActive = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL]();
               cbActive.setHorizontalAlignment([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL].CENTER);
               cbActive.setBackground(m_TableWorker.getBackground());
               editor = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL](cbActive);
               (([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL])editor).setClickCountToStart( 2 );
               cbActive.addActionListener( new mainFrame_jCheckBoxWorkerIsLicenseActive_actionAdapter(this) );
           }
           else
           {
               editor = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL](new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtextfield']JTextField[/URL]());
           }
           [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecolumn']TableColumn[/URL] column = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecolumn']TableColumn[/URL]( k, WorkerDataReport.m_columns[k].m_width, renderer, editor );
           column.setHeaderRenderer( createDefaultRenderer() );
           m_TableWorker.addColumn( column );
       }

       [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtableheader']JTableHeader[/URL] headerWorker = m_TableWorker.getTableHeader();
       headerWorker.setUpdateTableInRealTime( true );
       headerWorker.addMouseListener( new WorkerColumnListener() );
       headerWorker.setReorderingAllowed( true );
       spnWorkerData.getViewport().add( m_TableWorker );

       rowHeaderTableWorker = new JList<Object>( new TableListModel(m_TableWorker) );
       rowHeaderTableWorker.setFixedCellWidth( 30 );
       rowHeaderTableWorker.setBackground( spnWorkerData.getBackground() );
       rowHeaderTableWorker.setFixedCellHeight( m_TableWorker.getRowHeight() );
       rowHeaderTableWorker.setCellRenderer( new RowHeaderRenderer(m_TableWorker) );
       rowHeaderTableWorker.addMouseListener( new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseadapter']MouseAdapter[/URL]()
       {
           public void mouseClicked( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseevent']MouseEvent[/URL] e )
           {
               int index = rowHeaderTableWorker.locationToIndex( e.getPoint() );
               m_TableWorker.setRowSelectionInterval( index, index );
               m_TableWorker.requestFocus();
           }
       });

       spnWorkerData.setRowHeaderView( rowHeaderTableWorker );
       rowHeaderTableWorker.repaint();
   } // createTableWorker

die drei Zeilen mit “setSelectionMode” etc. habe ich mir Web angelesen, bringen aber nichts. Wobei sie ja im ersten Beispiel, WO ich selektieren kann, auch nicht drin sind …
Uns so wie ich es verstanden habe, muss ich doch “RowSelectionAllowed” auf TRUE und “ColumnSelectionAllowed” auf FALSE setzen, damit klar ist, dass Zeilen und keine Spalten selektiert werden sollen, oder ??
Aber auch andere Wertekombinationen bringen nichts!

Ich habe auch mit “setCellSelectionEnabled” rumgespielt, aber auch ohne jeglichen Erfolg!
Auch kann ich einzelne Zellen editierbar machen, aber selektiert wird weiterhin nicht!

Habe auch versucht, nach einem Tipp in einem anderen Forum, einen “cellSelectionModel.addListSelectionListener” zu bauen. Hiermit wurde mir zwar ggf. der Inhalt einer selektierten Zelle angezeigt, aber von Selektion keine Spur …

Habe mir auch mal die Renderer angeschaut, aber auch die machen hier nix Aufregendes!

An den Stellen, wo die Table deklariert und einem ScrollPanel zu gewiesen werden, sehe ich weiter auch nichts !

Bin inzwischen reichlich ratlos … :(
Hat irgendwer eine Idee, wonach ich noch suchen könnte ???

Hier noch ein Beispiel, was mit ‘markieren/selektieren’ gemeint ist:
WorkerLiz.jpg

Danke und VG
Klaus