PDA

View Full Version : [JAVA] Jtable e testo forzato


franksisca
30-11-2006, 16:55
ho già chiesto e ricuevuto risposta su come forzare l'inserimento delle sole cifre in una jtextfield, è possibile fare la stessa cosa in una jtable, magari aggiungiendo le virgole??????

MEMon
30-11-2006, 17:24
Dovresti crearti un tuo modello per la tabella(estendi AbstractTableModel) e fare l'override del metodo "setValueAt(Object value,int riga,int colonna)".
public void setValueAt(Object value,int riga,int colonna){
Object[] server=getServer(riga);
server[colonna]=value;
data.set(riga,server);
fireTableCellUpdated(riga,colonna);
}

In questo modo puoi fare un controllo sul valore che inserisci.

data è qualcosa del genere "private Vector<Object[]> data=new Vector<Object[]>();"
Secondo me è così, am aspetta andbin e PGI :)

franksisca
30-11-2006, 17:26
Secondo me è così, am aspetta andbin e PGI :)
:D :D :D :D :D :D


comunque grazie, spero che loro confermino o mi dicano qualcos'altro, nel frattempo provo a sincronizzare i jscroller

MEMon
30-11-2006, 17:36
Mi è venuto in mente un altra cosa, se tu hai già un tuo componente che permette lìimissione solo di numeri, puoi sostituire quello alle normali celle della jtable.
Sul modo però non sono sicurissimo, ad esempio per inserire un'immagine si fa così:
public Class<?> getColumnClass(int col) {
if(col==5) return ImageIcon.class;
else return Object.class;
}
In pratica la colonna 5 contiene solo imageicon, quindi credo che se tu ci metti il nome della classe del tuo oggetto poi contenga solo il tuo oggetto(ovviamente senza la restrizione del numero della colonna).
Però non sn sicurissimo.

franksisca
30-11-2006, 17:56
adesso provo, perchè per il momento ho dei jtextfield "bloccati" a numeri, se posso sostituisco tutte le celle con quelli, però a me servirebbe anche la virgola, ma non come separatore di migliagli, proprio come separatore di cifre....

franksisca
02-12-2006, 19:20
ho qualche problemino, praticamente non riesco a farlo, hai del codice più completo, perchè io sono completamente rinco.........

MEMon
02-12-2006, 19:44
Ti incolla qua il mio abstract model per la tabella che feci per i server del mio giochino:
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class ModelloTabellaServer extends AbstractTableModel{

private String[] nomiColonne={"Nome","Giocatori","Mappa","Modalità","Ping",""};
private Vector<Object[]> data=new Vector<Object[]>();

public ModelloTabellaServer(){
data.add(new Object[]{"Nessun server trovato...","","","","",""});
}

public int getRowCount(){
return data.size();
}

public int getColumnCount(){
return nomiColonne.length;
}

public Class<?> getColumnClass(int col) {
if(col==5) return ImageIcon.class;
else return Object.class;
}

public Object getValueAt(int riga,int colonna){
return data.get(riga)[colonna];
}

public String getColumnName(int colonna){
return nomiColonne[colonna];
}

public void setValueAt(Object value,int riga,int colonna){
Object[] server=getServer(riga);
server[colonna]=value;
data.set(riga,server);
fireTableCellUpdated(riga,colonna);
}

public Object[] getServer(int riga){
return data.get(riga);
}

public void addServer(Object[] server){
String info=(String)server[4];
String ping=info.substring(5,info.indexOf(' '));
if(Integer.parseInt(ping)>170) server[5]=new ImageIcon("textures/menu/pess.png");
else if(Integer.parseInt(ping)>70) server[5]=new ImageIcon("textures/menu/buono.png");
else server[5]=new ImageIcon("textures/menu/ott.png");
data.add(server);
fireTableDataChanged();
}

public void removeServer(Object[] server){
data.remove(server);
fireTableDataChanged();
}

public void rimuoviTutto(){
data.clear();
fireTableDataChanged();
}

public void rimuoviUltimo(){
data.remove(data.size()-1);
fireTableDataChanged();
}
}
Io mi scontrai con le tabelle solo qui, quindi non ho apporfondito più di tanto...
Comunque in questo pezzo di codice:
public Class<?> getColumnClass(int col) {
if(col==5) return ImageIcon.class;
else return Object.class;
}
se ci metti al posto di ImageIcon la classe del tuo componente che hai fatto in pratica vincoli le celle ad essere di quel preciso tipo.
Dovrebbe andare prova!
Ovviamente poi ogni riga della tua tabella deve essere un array/lista di quegli oggetti non puoi mettere delle stringhe.