|
| TableCellRenderer og Border Fra : Morten Rasmussen |
Dato : 22-11-01 15:35 |
|
Hej folkens!
Er der nogle der kan hjælpe! Når man har en JTable og 'går rundt' i den får
man en lille markering rundt om cellen så man kan se hvilken celle man er i!
/*
Normalt markeres hele rækken op, men hvis jeg skriver nedenstående linie
fungere det som ovenstående!
table.setRowSelectionAllowed(false);
*/
Dette er jo fint, men hvis jeg laver en renderer som extender fra en
JCheckBox (for at få en ckeckbox i en celle) får jeg ikke en cellemarkering
når jeg 'går ind' i cellen!?
Herunder har jeg et uddrag af min 'CheckBox renderer' med de linier jeg
merer der skal til (men som jo ikke virker!). Tak hvis nogle kan hjælpe.
public class CheckBoxCellRendererExt extends JCheckBox
implements TableCellRendererExt, Serializable
{
:: initialisering m.m.
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus, int row, int
column) {
::
:: Herundee er den kode jeg mener burde gøre hvad jeg ønsker
if (hasFocus) {
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") ); /*
DENNE linie! */
if (table.isCellEditable(row, column)) {
super.setForeground( Color.red );//UIManager.getColor("Table.focusCxellForeg
round") );
super.setBackground( Color.green );//UIManager.getColor("Table.focusxCellBac
kground") );
}
else
setBorder(noFocusBorder);
}
}
}
| |
Lars Mosegård (22-11-2001)
| Kommentar Fra : Lars Mosegård |
Dato : 22-11-01 18:06 |
|
"Morten Rasmussen" <mra@ofir.dk> skrev i en meddelelse
news:3bfd0d18$0$239$edfadb0f@dspool01.news.tele.dk...
> public Component getTableCellRendererComponent(JTable table, Object
> value,
> boolean isSelected, boolean hasFocus, int row, int
> column) {
> ::
> :: Herundee er den kode jeg mener burde gøre hvad jeg ønsker
> if (hasFocus) {
> setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") ); /*
> DENNE linie! */
>
Hvis jeg husker rigtigt, skal du tjekke for isSelected istedet for hasFocus.
En anden måde at få CheckBoxes i en JTable er at lave sin egen TableModel
nedarvende fra AbstractTableModel. Man skal så:
- Returnere Boolean-s i getValueAt
- Huske at overskrive getColumnClass
Mvh
Lars
| |
Morten Rasmussen (23-11-2001)
| Kommentar Fra : Morten Rasmussen |
Dato : 23-11-01 14:53 |
|
Tak for svaret!
Jeg har ikke brugt mig egen TableModel som du skriver - en sådan har jeg på
et helt ander 'overordnet' neveau! ... om det så er hensigtsmæssigt skal jeg
være usagt.
Problemet er at en CheckBox umiddelbart ikke har har en 'Border'!!?, når jeg
kalder getBorder er den ihvertfald null. Istedet blev løsningen som
følgende:
if (hasFocus) {
if (table.isCellEditable(row, column)) {
uper.setBackground( UIManager.getColor("Table.selectionBackground") );
} else {
setBorder(noFocusBorder);
}
... og det virker! Men tak alligevel.
/Morten
"Lars Mosegård" <lamos@post8.tele.dk> wrote in message
news:3bfd3020$0$25410$edfadb0f@dspool01.news.tele.dk...
>
> "Morten Rasmussen" <mra@ofir.dk> skrev i en meddelelse
> news:3bfd0d18$0$239$edfadb0f@dspool01.news.tele.dk...
> > public Component getTableCellRendererComponent(JTable table, Object
> > value,
> > boolean isSelected, boolean hasFocus, int row,
int
> > column) {
> > ::
> > :: Herundee er den kode jeg mener burde gøre hvad jeg ønsker
> > if (hasFocus) {
> > setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
/*
> > DENNE linie! */
> >
> Hvis jeg husker rigtigt, skal du tjekke for isSelected istedet for
hasFocus.
>
> En anden måde at få CheckBoxes i en JTable er at lave sin egen TableModel
> nedarvende fra AbstractTableModel. Man skal så:
> - Returnere Boolean-s i getValueAt
> - Huske at overskrive getColumnClass
>
> Mvh
> Lars
>
>
| |
|
|