Visualizzazione dei risultati da 1 a 7 su 7

Discussione: JTextfield in JTable

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218

    JTextfield in JTable

    Premesso che ho letto i tutorial sul sito sun.

    Ho una JTable, e in alcune colonne voglio avere dei JTextfield editabili.

    Ho creato un tablemodel.

    Facendo partire il programma, la Jtextfield appare normale, ma non appena ci clicco viene fuori la stringa del tipo.
    E' modificabile ma non capisco il perchè di questo comportamento.
    Le jtextfield se non erro hanno un editor di default che ho usato.

    Allego il model table e il mio jtextfield e

    codice:
    public class DatiUIModelTable extends AbstractTableModel {
    
    	public JTextField prova = new JTextField();
    	
    	
    	private JLabel[] columnNames = {
    			new JLabel("Identificatore"), 
    			new JLabel("Categoria"), 
    			new JLabel("Destinazione"), 
    			new JLabel("Metratura (in mq)"), 
    			new JLabel("Posizione interna"), 
    			new JLabel("Proprietario"), 
    			new JLabel("Quota"), 
    	};	
    	
    	private Object[][] data = {
    		{prova, new JTextField(), new JComboBox(), new JTextField(), new JTextField(), new JComboBox(), new JTextField()}};
    		
    
    	public int getColumnCount() {
    		return columnNames.length;
    	}
    
    	public int getRowCount() {
    		return 1;
    	}
    
    	public String getColumnName(int col) {
    	    return columnNames[col].getText();
    	}
    
    	public Object getValueAt(int row, int col) {
    	    return data[row][col];
    	}
    	
    	public Class<?> getColumnClass(int c) {
    		return getValueAt(0, c).getClass();
    	}
    	
    	/*
        * Don't need to implement this method unless your table's
        * editable.
        */
        public boolean isCellEditable(int row, int col) {
                return true;     
        }
        
        public void setValueAt(Object value, int row, int col) {
        	if(col==0){
        		prova.setText(value.toString());
        	}
        	
        	if(col != 2 && col != 5)
        	{
                data[row][col] = value.toString();
        	}
        	else{data[row][col] = value;}
            fireTableCellUpdated(row, col);
        }
    
    	/**
    	 * @return the data
    	 */
    	public Object[][] getData() {
    		return data;
    	}
    
    }
    codice:
     public class TextFieldRenderer extends JTextField implements TableCellRenderer{
    
    		JTextField txf = null;
    	
    		public TextFieldRenderer()  {
    			txf=new JTextField();
    		}
    		
    		public Component getTableCellRendererComponent(JTable table, Object value, 
    				boolean isSelected, boolean hasFocus, int row, int col) {
    			if (value instanceof String) {
    				String s = (String) value;
    				txf.setText(s);
    				return txf;
    				
    			}
    			return txf;
    		}
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    1) Per i nomi delle colonne non ha senso creare delle JLabel!! Metti un array di stringhe e fai ritornare la stringa della colonna richiesta.

    2) Non ti serve creare un JTextField.

    3) Non ti serve creare un renderer per visualizzare un textfield.

    4) Affinché una cella possa editare un testo è sufficiente che:
    - getColumnClass() ritorni String.class (va bene anche Object.class)
    - il dato interno al model sia un oggetto String (setValue e getValue semplicemente assegnano, ritornano il dato interno)
    - la colonna sia editabile (isCellEditable() ritorna true)

    (l'editor di default associato a Object.class gestisce già lui il textfield)

    Il model deve contenere dati, non componenti GUI. Non deve gestire JLabel, JTextField, JComboBox ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Grazie mille, ci provo e ti faccio sapere.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Se sei riuscito a farmi capire mi hai aperto un nuovo mondo!

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Solo un dubbio.
    Il JComboBox.
    Come posso mettere i suoi dati nel tableModel?
    Ci metto semplicemente un new String[] ??

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TheBestNeo
    Il JComboBox.
    Come posso mettere i suoi dati nel tableModel?
    Ci metto semplicemente un new String[] ??
    No affatto!! JComboBox ha 1 solo valore "selezionato" e nel model ci deve essere solo quello.

    Per impostare un editor che mostri un JComboBox, vedi qui
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    218
    Allora ho messo una string.
    Dovrebbe andare cosi.
    Per quanto riguarda l'editor e il renderer nel combobox ci sono riuscito a farli!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.