|
| ListSelectionListener og dobbelt-kald Fra : Janus |
Dato : 15-12-05 15:36 |
|
Hej NG!
Jeg har tilføjet en ListSelectionListener til en ListSelectionModel
tilhørende et JTable.
valueChanged(ListSelectionEvent e) bliver (desværre) kaldet 2 gange, når
man skifter selection af en row i mit JTable. Det er selvfølgelig logisk
nok, da det drejer sig om hhv en select og en de-select.
Men er der ikke en smart måde at skelne mellem disse to events, da mit
program kun skal bruge den row, der er blevet selected?
På forhånd tak, Janus
| |
Henrik Davidsen (15-12-2005)
| Kommentar Fra : Henrik Davidsen |
Dato : 15-12-05 17:27 |
|
> Men er der ikke en smart måde at skelne mellem disse to events, da mit
> program kun skal bruge den row, der er blevet selected?
Jeg ved ikke lige om der er en smartere måde, og har heller ikke prøvet om
dette vil virke, men jeg ville i valueChanged metoden teste på
e.getFirstIndex, og sammenligne med getMinSelectedIndex på ListModel'en.
Hvis de er ens, må valueChanged-kaldet dreje sig om den række der er blevet
valgt. Hvis e.getFirstIndex og getMinSelectedIndex på listen er forskellige,
må e.getFirstIndex være index'et på den række der nu ikke er selected
længere.
Dvs, at metoden blot skal returnere hvis e.getFirstIndex og
getMinSelectedIndex er forskellige, og ellers udføres metoden.
Prøv engang (eller vent og se om der kommer mere fornuftige løsninger ;)
/Sjang
Ps. Hvis du arbejder med flere valgte rækker, må du lige lave noget
gennemløb på getFirstIndex og getLastIndes på ListSelectionEventen, og
sammenligne med ListModel'ens getMinSelectedIndex og getMaxSelectedIndex.
| |
Filip Larsen (15-12-2005)
| Kommentar Fra : Filip Larsen |
Dato : 15-12-05 21:58 |
|
Janus skrev
> Jeg har tilføjet en ListSelectionListener til en ListSelectionModel
> tilhørende et JTable.
> valueChanged(ListSelectionEvent e) bliver (desværre) kaldet 2 gange,
når
> man skifter selection af en row i mit JTable.
Standard idiomet er at ignorere kald hvor e.getValueIsAdjusting() er
sand, a la
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
// .. ager på den nye selection
}
}
Mvh,
--
Filip Larsen
| |
Janus (18-12-2005)
| Kommentar Fra : Janus |
Dato : 18-12-05 22:58 |
|
Filip Larsen wrote:
>
>
> Standard idiomet er at ignorere kald hvor e.getValueIsAdjusting() er
> sand, a la
>
> public void valueChanged(ListSelectionEvent e) {
> if (!e.getValueIsAdjusting()) {
> // .. ager på den nye selection
> }
> }
>
>
> Mvh,
Jæsjæs, den sad lige i øjet! Mange tak :)
Vh Janus
| |
|
|