Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137

    [JAVA] JTextField visibile da selezione JComboBox

    Ciao,

    mi serve una mano: io ho una jcombobox contente diverse voci, quando l'utente ne seleziona una particolare dovrebbe comparire una JTextField che inizialmente ha la sua visible impostata a false ma non compare, perchè?
    Se anzichè la gestione della visiblità utilizzassi la gestione dell'abilitazione funziona tutto ma così non mi piace.


  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Puoi inoltrare le domande su Java al nuovo sottoforum dedicato. Sposto la discussione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: [JAVA] JTextField visibile da selezione JComboBox

    Originariamente inviato da zephyr
    Ciao,

    mi serve una mano: io ho una jcombobox contente diverse voci, quando l'utente ne seleziona una particolare dovrebbe comparire una JTextField che inizialmente ha la sua visible impostata a false ma non compare, perchè?
    Se anzichè la gestione della visiblità utilizzassi la gestione dell'abilitazione funziona tutto ma così non mi piace.

    A rigore dovrebbe funzionare anche con setVisible ma se non posti codice è un po diffcile capire dove potrebbe stare il problema.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    ti dovrei postare 2 classi perchè una classe mi crea il componente che utilizzo per costruire la JTextField e la JComboBox mentre un'altra mi gestisce l'actionlistener della combobox.
    pensavo bastasse la spiegazione perchè è come se non mi creasse la casella di testo.

  5. #5
    Originariamente inviato da zephyr
    ti dovrei postare 2 classi perchè una classe mi crea il componente che utilizzo per costruire la JTextField e la JComboBox mentre un'altra mi gestisce l'actionlistener della combobox.
    pensavo bastasse la spiegazione perchè è come se non mi creasse la casella di testo.
    Posta tutto ma sfoltisci del codice non ierente il particolare problema. Insomma cerca di riprodurre il problema in piccolo. Altrimenti, almeno a me, viene male ceracre di aiutarti.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    codice:
    public class JSearchElement extends JPanel implements ActionListener {
    	private JLabel jlabel;
    	private JComboBox joperator;
    	private JTextField jvalue;
    	private JTextField jvalueCompreso;
    	
    	
    	/**
    	 * Costruisce il componente
    	 * @param label Etichetta del campo
    	 * @param operators Operatore di confronto
    	 */
    	public JSearchElement(String label, Vector operators, boolean secondaCasella) {
    		super();
    		GridBagLayout grigliaAvanzata = new GridBagLayout();
    		GridBagConstraints c = new GridBagConstraints();
    		setLayout(grigliaAvanzata);
    		c.fill = GridBagConstraints.HORIZONTAL;
    		c.anchor = GridBagConstraints.EAST;
    		c.insets = new Insets(5, 5, 5, 5);
    		// etichetta
    		impostaPosizioneComponente(c, 0, 0, 0);
    		jlabel = new JLabel(label);
    		grigliaAvanzata.setConstraints(jlabel, c);
    		add(jlabel);
    		// operatore
    		impostaPosizioneComponente(c, 1, 0, 0);
    		joperator = new JComboBox(operators);
    		grigliaAvanzata.setConstraints(joperator, c);
    		joperator.addActionListener(this);
    		add(joperator);
    		// casella di testo
    		impostaPosizioneComponente(c, 2, 0, 80);
    		jvalue = new JTextField();
    		grigliaAvanzata.setConstraints(jvalue, c);
    		add(jvalue, c);
    		// casella di testo aggiuntiva se l'operatore scelto è compreso
    		if (secondaCasella){
    			impostaPosizioneComponente(c, 3, 0, 80);
    			jvalueCompreso = new JTextField();
    			grigliaAvanzata.setConstraints(jvalueCompreso, c);
    			jvalueCompreso.setVisible(false);		
    			add(jvalueCompreso, c);
    		}
    			
    	}	
    	
    	
    	/**
    	 * Imposta la posizione di ogni componente all'interno del layout
    	 * @param gbc
    	 * @param gx
    	 * @param gy
    	 * @param padding
    	 */
    	private void impostaPosizioneComponente(GridBagConstraints gbc, int gx, int gy, int padding) {
    		gbc.gridx = gx;
    		gbc.gridy = gy;
    		gbc.ipadx = padding;
    	}
    	
    	
    	
    	/**
    	 * Imposta l'etichetta
    	 * @param label Etichetta
    	 */
    	public void setLabel(String label){
    		
    	}
    	
    	
    	/**
    	 * Restituisce il valore inserito nella casella di testo
    	 * @return Contenuto casella di testo
    	 */
    	public String getValue(){
    		return jvalue.getText();
    	}
    	
    	
    	/**
    	 * Restituisce il valore inserito nella casella di testo
    	 * @return Contenuto casella di testo
    	 */
    	public String getValueCompreso(){
    		return jvalueCompreso.getText();
    	}
    	
    	
    	/**
    	 * Imposta il valore della casella di testo
    	 * @param value Contenuto per la casella di testo
    	 */
    	public void setValue(String value){
    		this.jvalue.setText(value);
    	}
    	
    	
    	/**
    	 * Restituisce l'operatore selezionato
    	 * @return 
    	 */
    	public Object getSelectedOperator(){
    		return joperator.getSelectedItem();
    	}
    	
    	
    	/**
    	 * Cambia la visibilità della casella di testo aggiuntiva a seconda della scelta dell'operatore
    	 *
    	 */
    	public void changeTextFieldVisible(){
    		if (joperator.getSelectedItem().equals("Compreso")){
    			jvalueCompreso.setVisible(true);
    		}
    		else
    			jvalueCompreso.setVisible(false);
    	}
    
    
    	/**
    	 * Gestisce l'evento di selezione della voce della combo operatore
    	 */
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == joperator){
    			changeTextFieldVisible();
    		}
    		
    	}
    }

    La classe viene richiamata da un JDialog.

  7. #7
    devi mettere nell' actionPerformed un metodo come pack() per "aggiornare" il frame...

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Devi rivalidare la finestra. Usa validate() subito dopo le chiamate ai metodi add().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.