Jframe jtable

di il
230 risposte

230 Risposte - Pagina 16

  • Re: Jframe jtable

    No, non la hanno ma da quanto mi è stato detto, se son tutte nella stessa cartella, java le vede come unico package
    comunque se la dichiaro fuori da
    
    public class FrameTabella extends JTable
    {
    
    }
    public enum Visualizza {
    }
    
    mi dice che devo farla su un file a parte
    EDIT:
    ok bastava toglier eil public
  • Re: Jframe jtable

    Questa roba qua ha senso metterla nell'abstracttablemodel? secondo me si
    
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class TableColumnHider
    {
        private JTable table;
        private TableColumnModel tcm;
        private Map<String, IndexedColumn> hidden = new HashMap<String, IndexedColumn>();
    
        public TableColumnHider(JTable table)
    	{
            this.table = table;
            this.tcm = table.getColumnModel();
        }
    
        public void hide(String columnName) 
    	{
            int index = tcm.getColumnIndex(columnName);
            TableColumn column = tcm.getColumn(index);
            IndexedColumn ic = new IndexedColumn(index, column);
            if (hidden.put(columnName, ic) != null)
    		{
                throw new IllegalArgumentException("Duplicate column name.");
            }
            tcm.removeColumn(column);
        }
    
        public void show(String columnName)
    	{
            IndexedColumn ic = hidden.remove(columnName);
            if (ic != null)
    		{
                tcm.addColumn(ic.column);
                int lastColumn = tcm.getColumnCount() - 1;
                if (ic.index < lastColumn)
    			{
                    tcm.moveColumn(lastColumn, ic.index);
                }
            }
        }
    	
    	private static class IndexedColumn
    	{
    
            private Integer index;
            private TableColumn column;
    
            public IndexedColumn(Integer index, TableColumn column)
    		{
                this.index = index;
                this.column = column;
            }
        }
    }
    
    anche perché altrimenti non saprei come usare i fire
    ok senso ne ha ma devo fare in modo che funzioni correttamente, altrimenti non ne esco fuori. tra parentesi funziona come prima quindi i fire non servon... credo
  • Re: Jframe jtable

    KuroKami69 ha scritto:


    No, non la hanno ma da quanto mi è stato detto, se son tutte nella stessa cartella, java le vede come unico package
    Se non c'è la dichiarazione di package, le classi sono nel package di "default". Questo ha delle limitazioni in generale ma nel tuo caso ok.

    KuroKami69 ha scritto:


    mi dice che devo farla su un file a parte
    DOVRESTI farla (la enum) in un sorgente a parte!

    KuroKami69 ha scritto:


    ok bastava toglier eil public
    Se togli il public, allora PUOI tenere la enum nello stesso sorgente dove c'è già una classe public. Queste sono le regole. Quando è che le studierai??

    KuroKami69 ha scritto:


    Questa roba qua ha senso metterla nell'abstracttablemodel? secondo me si
    
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class TableColumnHider
    {
        private JTable table;
        private TableColumnModel tcm;
        private Map<String, IndexedColumn> hidden = new HashMap<String, IndexedColumn>();
    //....
    Sarò breve perché sto per andare a dormire: NO.
  • Re: Jframe jtable

    Difatti non lo ha mmh ok buonanotte! avevo pensato di fare la enum in una classe a parte ma onestamente non mi andava. anyway. quello script funziona solo ci mette dei doppioni dentro mmh
  • Re: Jframe jtable

    Ok ultima domanda, dopo devo dire che è finito davvero.
    allora alla fine mi è uscito
    
    	private String mode = "auto", parabrezza; //facendo questo giro: ...moto->both->auto, la colonna tettuccio diventa parabrezza, quindi ho bisogno di una variabile che mi segni questo percorso
    	
    	private void setMod(String mode)
    	{
    		this.mode = mode;
    		if(mode.equals("moto"))
    		this.parabrezza = this.mode;
    	}
    class RadioButtonActionListener implements ActionListener 
    		{
    			@Override
    			public void actionPerformed(ActionEvent e) 
    			{
    				JRadioButton button = (JRadioButton)e.getSource();
    				atb.clean();
    				if (auto.isSelected() && mode.equals("both")) //se seleziono auto arrivando da entrambi
    				{
    					setMod("auto");
    					hider.show("Posti");
    					hider.show("Portiere");
    					hider.show("Bagagliaio");
    					hider.show("Trazione");
    					hider.show("Lunghezza");
    					hider.show("Altezza Car.");
    					if(parabrezza.equals("moto"))
    					hider.show("Parabrezza");
    					else
    					hider.show("Tettuccio");
    					atb.motoParabrezza(false);
    				}
    				else if (auto.isSelected() && mode.equals("moto")) //se seleziono auto arrivando da moto
    				{
    					setMod("auto");
    					atb.motoParabrezza(false);
    					hider.show("Posti");
    					hider.show("Portiere");
    					hider.show("Bagagliaio");
    					hider.show("Trazione");
    					hider.show("Lunghezza");
    					hider.show("Altezza Car.");
    				}
    				else if (moto.isSelected() && mode.equals("auto")) //se seleziono moto arrivando da auto
    				{
    					setMod("moto");
    					atb.motoParabrezza(true);
    					hider.hide("Posti");
    					hider.hide("Portiere");
    					hider.hide("Bagagliaio");
    					hider.hide("Trazione");
    					hider.hide("Lunghezza");
    					hider.hide("Altezza Car.");
    				}
    				else if(moto.isSelected() && mode.equals("both"))
    				{
    					setMod("moto");
    					hider.show("Parabrezza");
    				}
    				else if (both.isSelected() && mode.equals("moto"))
    				{
    					setMod("both");
    					hider.hide("Parabrezza");
    				}
    				else if (both.isSelected() && mode.equals("auto"))
    				{
    					setMod("both");
    					hider.hide("Posti");
    					hider.hide("Portiere");
    					hider.hide("Bagagliaio");
    					hider.hide("Trazione");
    					hider.hide("Lunghezza");
    					hider.hide("Altezza Car.");
    					hider.hide("Tettuccio");
    				}
    			}
    		}
    e funziona.
    l'unico problema è che
    1) passando da auto (default) a moto, e viceversa, funziona
    2) passando da auto a entrambi, e viceversa, funziona
    3) passando da moto a entrambi, e viceversa, mi genera un'eccezione, perché in moto alcune colonne sono già state tolte. il punto è che se io mi faccio quell'else con tutti gli hide del caso, mi genera comunque eccezioni.
    io ora la butto la e provo a farla, ma questa cosa la devo gestire con una variabile di supporto che mi tiene conto del precedente bottone in uso vero?

    EDIT: ho modificato il codice, che riporto sopra. però ancora non funziona al 100%
    sono sicuro che si poteva fare meglio ma sono abbastanza soddisfatto di esserci arrivato da solo. e sono anche contento di aver capito il funzionamento dell'hider quindi anche se ho fatto un mero copia e incolla, l'ho fatto con coscienza

    EDIT2:
    ok, non riesco a gestirlo da solo ahahaha troppo incasinato al momento solo un paio di combinazioni generano eccezioni, ma se provo a fixare non mi funziona correttamente mmh
  • Re: Jframe jtable

    Ok non capisco una cosa
    
    else if(moto.isSelected() && mode.equals("both")) //both -> moto
    				{
    					if (parabrezza)
    					hider.show("Parabrezza");
    					else
    					hider.show("Tettuccio");
    					atb.motoParabrezza(true);
    					setMod("moto");
    				}
    
    allora se quel atb.motoParabrezza, che serve solo a cambiare il nome della colonna da tettuccio a parabrezza quando seleziono moto, NON lo metto, il programma funziona correttamente ma genera un'eccezione quando faccio questo giro: auto -> entrambi -> moto -> entrambi, perché NON vede una colonna, quella di parabrezza per la precisione. ed è dovuto dal fatto che quando passo da auto a entrambi, la colonna si chiama tettuccio. quando poi vado da entrambi a moto, lui mi visualizza tettuccio. ma quando vado da moto a entrambi allora lui cerca di nascondere parabrezza, che però non esiste in quel momento, e mi genera un'eccezione. per questo volevo ovviare mettendo quel atb.motoParabrezza, che però se lo metto mi mostra TUTTE le colonne nascoste, senza motivo.
    perché questo comportamento?
    metto anche i 2 codici inerenti al columnname e a quel metodo
    
    public void motoParabrezza(boolean m)
    	{
    		this.m = m;
    		fireTableStructureChanged();
    	}
    
    @Override
    	public String getColumnName (int columnIndex)
    	{
    		if (columnIndex == 12 && c)	return "KW";
    		else if(columnIndex == 25 && m) return "Parabrezza";
    		else return colonne[columnIndex];
    	}
    
    e mi succede anche quando vado a premere "mostra in KW"...
    questo vuol dire che al cambiamento del nome della colonna lui mi riesegue il getvalueat giusto...?
    EDIT:
    come soluzione brutale posso fare una variabile boolean visualizzazione nel tablemodel, mettere un if nel getvalueat, e se la variabile è false allora i casi da n in poi non me li esegue? e relativo metodo di set variabile... mi sembra molto forzato ma non conosco altre soluzioni
    EDIT 2:
    dopo una breve ricerca ho usato questo
    setAutoCreateColumnsFromModel(false);
    sulla mia tabella e funziona <3
    EDIT 3: ok non funziona....
Devi accedere o registrarti per scrivere nel forum
230 risposte