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
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
und die zugehörige Tabelle, in der nichts selektiert werden kann
/**
* @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 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:
Danke und VG
Klaus
BTW: kann ich hier Code-Tags nur noch händisch einfügen ???