1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Einzelne Zeile in jTable selektieren klappt nicht :-(

Dieses Thema im Forum "JavaFX, Swing, Java2D/3D, SWT, JFace" wurde erstellt von vfl_freak, 6. Dezember 2017.

  1. vfl_freak

    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
    Code (Java):
    1.   private void createTableWorkerLiz()
    2.    {
    3.        m_DataReportWorkerLizenzen = new LicenseDBWorkerDataReport( this );
    4.        m_TableWorkerLizenzen = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtable']JTable[/URL]();
    5.        m_TableWorkerLizenzen.setAutoCreateColumnsFromModel( false );
    6.        m_TableWorkerLizenzen.setModel( m_DataReportWorkerLizenzen );
    7.        for( int spalte = 0; spalte < LicenseDBWorkerDataReport.m_columns.length; spalte++ )
    8.        {
    9.            [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecellrenderer']TableCellRenderer[/URL] renderer;
    10.            switch( spalte )
    11.            {
    12.                case LicenseDBWorkerDataReport.COL_AKTIV:
    13.                case LicenseDBWorkerDataReport.COL_FEATUREPUTONHOLD:
    14.         // und weitere ...
    15.                {
    16.                    renderer = new CheckCellRenderer();
    17.                    break;
    18.                }
    19.  
    20.                case LicenseDBWorkerDataReport.COL_BTNEDIT:
    21.                case LicenseDBWorkerDataReport.COL_BTNDELETE:
    22.                {
    23.                    renderer = new LicenseDBButtonRenderer();
    24.                    break;
    25.                }
    26.  
    27.                default:
    28.                {
    29.                    ColoredLicenseTableCellRenderer ctr = new ColoredLicenseTableCellRenderer();
    30.                    ctr.setHorizontalAlignment( LicenseDBWorkerDataReport.m_columns[spalte].m_alignment );
    31.                    renderer = ctr;
    32.                }
    33.            } // switch
    34.  
    35.            [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecelleditor']TableCellEditor[/URL] editor = null;
    36.            switch( spalte )
    37.            {
    38.                case LicenseDBWorkerDataReport.COL_AKTIV:
    39.                {
    40.                    [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]();
    41.                    cbActive.setHorizontalAlignment( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL].CENTER );
    42.                    cbActive.setBackground( m_TableWorkerLizenzen.getBackground() );
    43.                    editor = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL]( cbActive );
    44.                    (([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL])editor).setClickCountToStart( 2 );
    45.                    cbActive.addActionListener( new mainFrame_jCheckBoxWorkerLicenseActive_actionAdapter(this) );
    46.                    break;
    47.                }
    48.         // weitere cases für alle Spalten
    49.                case LicenseDBWorkerDataReport.COL_BTNEDIT:
    50.                case LicenseDBWorkerDataReport.COL_BTNDELETE:
    51.                {
    52.                    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 );
    53.                    editor.addCellEditorListener( new LicenseDBCellListener(m_TableWorkerLizenzen,spalte,"Side A","Side B") );
    54.                    break;
    55.                }
    56.  
    57.                default:
    58.                    editor = null;
    59.            } // switch
    60.  
    61.            [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 );
    62.            column.setHeaderRenderer( createDefaultRenderer() );
    63.            m_TableWorkerLizenzen.addColumn( column );
    64.        } // for
    65.  
    66.        [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtableheader']JTableHeader[/URL] headerWorker = m_TableWorkerLizenzen.getTableHeader();
    67.        headerWorker.setUpdateTableInRealTime( true );
    68.        headerWorker.addMouseListener( new WorkerLizenzColumnListener() );
    69.        headerWorker.setReorderingAllowed( true );
    70.        spnWorkerLizenzen.getViewport().add( m_TableWorkerLizenzen );
    71.  
    72.        rowHeaderTableWorkerLizenzen = new JList<Object>( new TableListModel(m_TableWorkerLizenzen) );
    73.        rowHeaderTableWorkerLizenzen.setFixedCellWidth( 30 );
    74.        rowHeaderTableWorkerLizenzen.setBackground( spnWorkerLizenzen.getBackground() );
    75.        rowHeaderTableWorkerLizenzen.setFixedCellHeight( m_TableWorkerLizenzen.getRowHeight() );
    76.        rowHeaderTableWorkerLizenzen.setCellRenderer( new RowHeaderRenderer(m_TableWorkerLizenzen) );
    77.        rowHeaderTableWorkerLizenzen.addMouseListener( new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseadapter']MouseAdapter[/URL]()
    78.        {
    79.            public void mouseClicked( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseevent']MouseEvent[/URL] e )
    80.            {
    81.                int index = rowHeaderTableWorkerLizenzen.locationToIndex( e.getPoint() );
    82.                m_TableWorkerLizenzen.setRowSelectionInterval( index, index );
    83.                m_TableWorkerLizenzen.requestFocus();
    84.            }
    85.        });
    86.        spnWorkerLizenzen.setRowHeaderView( rowHeaderTableWorkerLizenzen );
    87.        rowHeaderTableWorkerLizenzen.repaint();
    88.    } // createTableWorkerLiz

    hier der Code der zugehörigen Tabelle, bei der es nicht klappt:
    Code (Java):
    1.     /**
    2.     * @brief Erzeugt eine JTable für den Reiter <tt>Worker</tt> und fügt sie in das zugehörige Panel ein
    3.     */
    4.    private void createTableWorker()
    5.    {
    6.        m_DataReportWorker = new WorkerDataReport( this, LT_WORKER );
    7.        m_TableWorker = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtable']JTable[/URL]();
    8.        m_TableWorker.setAutoCreateColumnsFromModel( false );
    9.        m_TableWorker.setModel( m_DataReportWorker );
    10.  
    11.     // #######################################################
    12.     // ##### diese drei Zeilen habe ich neu eingefügt !! #####
    13.        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 );
    14.        m_TableWorker.setColumnSelectionAllowed( false );
    15.        m_TableWorker.setRowSelectionAllowed( true );
    16.     // #######################################################
    17.  
    18.        for( int k = 0; k < WorkerDataReport.m_columns.length; k++ )
    19.        {
    20.            [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecellrenderer']TableCellRenderer[/URL] renderer;
    21.            if( k == WorkerDataReport.COL_LICENSE_AKTIV )
    22.            {
    23.                renderer = new CheckCellRenderer();
    24.            }
    25.            else
    26.            {
    27.                ColoredWorkerTableCellRenderer ctr = new ColoredWorkerTableCellRenderer();
    28.                ctr.setHorizontalAlignment( WorkerDataReport.m_columns[k].m_alignment );
    29.                renderer = ctr;
    30.            }
    31.  
    32.            [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+tablecelleditor']TableCellEditor[/URL] editor;
    33.            if( k == WorkerDataReport.COL_LICENSE_AKTIV )
    34.            {
    35.                [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]();
    36.                cbActive.setHorizontalAlignment([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jcheckbox']JCheckBox[/URL].CENTER);
    37.                cbActive.setBackground(m_TableWorker.getBackground());
    38.                editor = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL](cbActive);
    39.                (([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+defaultcelleditor']DefaultCellEditor[/URL])editor).setClickCountToStart( 2 );
    40.                cbActive.addActionListener( new mainFrame_jCheckBoxWorkerIsLicenseActive_actionAdapter(this) );
    41.            }
    42.            else
    43.            {
    44.                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]());
    45.            }
    46.            [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 );
    47.            column.setHeaderRenderer( createDefaultRenderer() );
    48.            m_TableWorker.addColumn( column );
    49.        }
    50.  
    51.        [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+jtableheader']JTableHeader[/URL] headerWorker = m_TableWorker.getTableHeader();
    52.        headerWorker.setUpdateTableInRealTime( true );
    53.        headerWorker.addMouseListener( new WorkerColumnListener() );
    54.        headerWorker.setReorderingAllowed( true );
    55.        spnWorkerData.getViewport().add( m_TableWorker );
    56.  
    57.        rowHeaderTableWorker = new JList<Object>( new TableListModel(m_TableWorker) );
    58.        rowHeaderTableWorker.setFixedCellWidth( 30 );
    59.        rowHeaderTableWorker.setBackground( spnWorkerData.getBackground() );
    60.        rowHeaderTableWorker.setFixedCellHeight( m_TableWorker.getRowHeight() );
    61.        rowHeaderTableWorker.setCellRenderer( new RowHeaderRenderer(m_TableWorker) );
    62.        rowHeaderTableWorker.addMouseListener( new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseadapter']MouseAdapter[/URL]()
    63.        {
    64.            public void mouseClicked( [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+mouseevent']MouseEvent[/URL] e )
    65.            {
    66.                int index = rowHeaderTableWorker.locationToIndex( e.getPoint() );
    67.                m_TableWorker.setRowSelectionInterval( index, index );
    68.                m_TableWorker.requestFocus();
    69.            }
    70.        });
    71.  
    72.        spnWorkerData.setRowHeaderView( rowHeaderTableWorker );
    73.        rowHeaderTableWorker.repaint();
    74.    } // 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
     
Die Seite wird geladen...