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 eine entsprechende Lizenz-Tabelle.
Während man nun in den Lizenz-Tabelle lustig per Mouseclick einizelne Zeilen markieren kann, klappt dies in den Client-Tabellen leider nicht. Dort bekomme ich rein gar nix markiert .... :-(
Beispiel:
Ich habe im zweiten Beispiel versucht, mit "setSelectionMode" etc. die Tabelle zum Markieren zu bewegen, aber leider ergebnislos, obwohl dies im Web vielfach beschrieben so wird!
Die jeweils verwendeten Renderer dürften doch keine Rolle spielen, oder ?
Ich hoffe, dass irgendwem ein Lapsus meinerseits aufällt ...
Danke und VG
Klaus
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 eine entsprechende Lizenz-Tabelle.
Während man nun in den Lizenz-Tabelle lustig per Mouseclick einizelne Zeilen markieren kann, klappt dies in den Client-Tabellen leider nicht. Dort bekomme ich rein gar nix markiert .... :-(
Beispiel:
Java:
private void createTableWorkerLiz()
{
m_DataReportWorkerLizenzen = new LicenseDBWorkerDataReport( this );
m_TableWorkerLizenzen = new JTable();
m_TableWorkerLizenzen.setAutoCreateColumnsFromModel( false );
m_TableWorkerLizenzen.setModel( m_DataReportWorkerLizenzen );
for( int spalte = 0; spalte < LicenseDBWorkerDataReport.m_columns.length; spalte++ )
{
TableCellRenderer 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
TableCellEditor editor = null;
switch( spalte )
{
case LicenseDBWorkerDataReport.COL_AKTIV:
{
JCheckBox cbActive = new JCheckBox();
cbActive.setHorizontalAlignment( JCheckBox.CENTER );
cbActive.setBackground( m_TableWorkerLizenzen.getBackground() );
editor = new DefaultCellEditor( cbActive );
((DefaultCellEditor)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 JCheckBox(), "Push me!", "Ouch", LT_WORKER );
editor.addCellEditorListener( new LicenseDBCellListener(m_TableWorkerLizenzen,spalte,"Side A","Side B") );
break;
}
default:
editor = null;
} // switch
TableColumn column = new TableColumn( spalte, LicenseDBWorkerDataReport.m_columns[spalte].m_width, renderer, editor );
column.setHeaderRenderer( createDefaultRenderer() );
m_TableWorkerLizenzen.addColumn( column );
} // for
JTableHeader 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 MouseAdapter()
{
public void mouseClicked( MouseEvent e )
{
int index = rowHeaderTableWorkerLizenzen.locationToIndex( e.getPoint() );
m_TableWorkerLizenzen.setRowSelectionInterval( index, index );
m_TableWorkerLizenzen.requestFocus();
}
});
spnWorkerLizenzen.setRowHeaderView( rowHeaderTableWorkerLizenzen );
rowHeaderTableWorkerLizenzen.repaint();
} // createTableWorkerLiz
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 JTable();
m_TableWorker.setAutoCreateColumnsFromModel( false );
m_TableWorker.setModel( m_DataReportWorker );
// #######################################################
// ##### diese drei Zeilen habe ich neu eingefügt !! #####
m_TableWorker.setSelectionMode( ListSelectionModel.SINGLE_INTERVAL_SELECTION );
m_TableWorker.setColumnSelectionAllowed( false );
m_TableWorker.setRowSelectionAllowed( true );
// #######################################################
for( int k = 0; k < WorkerDataReport.m_columns.length; k++ )
{
TableCellRenderer 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;
}
TableCellEditor editor;
if( k == WorkerDataReport.COL_LICENSE_AKTIV )
{
JCheckBox cbActive = new JCheckBox();
cbActive.setHorizontalAlignment(JCheckBox.CENTER);
cbActive.setBackground(m_TableWorker.getBackground());
editor = new DefaultCellEditor(cbActive);
((DefaultCellEditor)editor).setClickCountToStart( 2 );
cbActive.addActionListener( new mainFrame_jCheckBoxWorkerIsLicenseActive_actionAdapter(this) );
}
else
{
editor = new DefaultCellEditor(new JTextField());
}
TableColumn column = new TableColumn( k, WorkerDataReport.m_columns[k].m_width, renderer, editor );
column.setHeaderRenderer( createDefaultRenderer() );
m_TableWorker.addColumn( column );
}
JTableHeader 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 MouseAdapter()
{
public void mouseClicked( MouseEvent e )
{
int index = rowHeaderTableWorker.locationToIndex( e.getPoint() );
m_TableWorker.setRowSelectionInterval( index, index );
m_TableWorker.requestFocus();
}
});
spnWorkerData.setRowHeaderView( rowHeaderTableWorker );
rowHeaderTableWorker.repaint();
} // createTableWorker
Die jeweils verwendeten Renderer dürften doch keine Rolle spielen, oder ?
Ich hoffe, dass irgendwem ein Lapsus meinerseits aufällt ...
Danke und VG
Klaus