|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jun 2007
Messaggi: 6
|
[JAVA] JTable e MouseListener
Un saluto a tutti! Devo creare una JTable con 4 colonne che inizialmente non sono editabili. "L'editabilità" deve avvenire in modo sequenziale, da destra verso sinistra. Mi spiego: le celle più a sinistra inizialmente non sono editabili ma lo è soltanto quella più a destra. Quest'ultima inizialmente è vuota ma può contenere un numero con la virgola. Una volta che l'utente inserisce il numero e preme invio, la cella successiva (la seconda da destra) deve diventare editabile e via dicendo. Il criterio affinchè una cella diventi editabile è che la cella precedente contenga un numero con la virgola e che l'utente abbia premuto invio. Se l'utente non preme invio oppure inserisce un carattere e preme invio, la prossima cella non deve diventare editabile. Consigli su come realizzare questa funzionalità?
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Prova a creare una sottoclasse di JTable e a sovrascrivere il metodo:
changeSelection(int, int, boolean, boolean) L'invocazione condizionata della super-definizione dovrebbe permetterti di controllare il trasferimento della selezione da una cella all'altra (nel caso specifico, di impedire che il passaggio avvenga).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Jun 2007
Messaggi: 6
|
Puoi farmi un esempio pratico anche rozzo?
P.s. il titolo del 3d non c'entra granchè |
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Pardon, ho letto selezione invece era modifica.
Il metodo da ridefinire è isCellEditable. Ad esempio: Codice:
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() { public void run() {
JFrame window = new JFrame("Test");
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
SubTable table = new SubTable();
table.setModel(new DefaultTableModel(4, 4));
JScrollPane scroller = new JScrollPane(table);
window.add(scroller);
window.pack();
window.setVisible(true);
}});
}
}
class SubTable extends JTable {
/* Sovrascrive il metodo isCellEditable della tabella */
public boolean isCellEditable(int row, int col) {
int maxCol = getColumnCount() - 1;
if(col == maxCol) {
//prima colonna a sinistra
return true;
} else {
//la cella precedente (sulla stessa riga) contiene un valore?
Object value = getValueAt(row, col + 1);
return !(value == null || String.valueOf(value).length() == 0);
}
}
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! Ultima modifica di PGI-Bis : 01-08-2007 alle 14:32. Motivo: ampiamente rimaneggiato... |
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:10.


















