Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496

    [JAVA] - String: modificare valore stringa passata in input

    Ciao, ho una funzione semplice
    Codice PHP:
        public void setComponent(Object component) {
                    if (
    component instanceof JLabel) {
                    ((
    JLabelcomponent).setText(text);
                } else if (
    component instanceof JButton) {
                    ((
    JButtoncomponent).setText(text);
                } else if (
    component instanceof JMenuItem) {
                    ((
    JMenuItemcomponent).setText(text);
                } else if (
    component instanceof JMenu) {
                    ((
    JMenucomponent).setText(text);
                } else if (
    component instanceof TitledBorder) {
                    ((
    TitledBordercomponent).setTitle(text);
                } else if (
    component instanceof JRadioButton) {
                    ((
    JRadioButtoncomponent).setText(text);
                } else if (
    component instanceof JCheckBox) {
                    ((
    JCheckBoxcomponent).setText(text);
                } else if (
    component instanceof String) {
                    
    component = new String(text);
                }
        } 
    Il metodo funziona benissimo per tutti i componenti swing, non funziona però per String. Infatti la stringa che passo in input con una chiamata .setComponent(miastringa), dopo la chiamata non cambia valore.
    Può il mio metodo cambiare il contenuto della stringa senza che debba restituire un oggetto (deve essere sempre void)?

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Oltre al fatto che una String, pur essendo un oggetto, si comporta come una variabile primitiva (quindi, passata per valore e non per riferimento), la tua variabile component è un parametro e quindi locale al metodo: la modifica del suo "puntamento" rimane quindi all'interno del metodo stesso. Non confonderti con i puntatori C!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] - String: modificare valore stringa passata in input

    Originariamente inviato da EngLab
    Codice PHP:
        public void setComponent(Object component) {
                    if (
    component instanceof JLabel) {
                    ((
    JLabelcomponent).setText(text);
                } else if (
    component instanceof JButton) {
                    ((
    JButtoncomponent).setText(text);
                } else if (
    component instanceof JMenuItem) {
                    ((
    JMenuItemcomponent).setText(text);
                } else if (
    component instanceof JMenu) {
                    ((
    JMenucomponent).setText(text);
                } else if (
    component instanceof TitledBorder) {
                    ((
    TitledBordercomponent).setTitle(text);
                } else if (
    component instanceof JRadioButton) {
                    ((
    JRadioButtoncomponent).setText(text);
                } else if (
    component instanceof JCheckBox) {
                    ((
    JCheckBoxcomponent).setText(text);
                } else if (
    component instanceof String) {
                    
    component = new String(text);
                }
        } 
    Il metodo funziona benissimo per tutti i componenti swing, non funziona però per String.
    Mi spiace ma ....
    1) Perché hai dovuto fare un metodo (fumoso e dubbio) del genere ... non è chiaro!
    2) Perché vorresti farlo per String .... non è chiaro!
    3) Tra l'altro non ha nemmeno senso, primo perché le stringhe sono oggetti "immutabili" ma secondo, poi comunque anche se quel parametro 'component' fa riferimento ad un oggetto String eseguire component=unaAltraStringa; va solo a cambiare il reference che è contenuto nel parametro (che è "locale").
    E tutto questo perché in Java il passaggio dei parametri è sempre per valore, per i tipi reference viene passata una copia del valore del reference.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Sto creando un programma multilanguage, e quindi quel metodo setta automaticamente il contenuto di un componente.
    Questo discorso va benissimo per label, option, checkbox. ma quando devo utilizzare le liste Choice? I componenti che vado ad aggiungere e che quindi devono essere modificati sono proprio delle stringhe.

  5. #5
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Credo tu debba prevedere un comportamento diverso.

    Ad esempio puoi provare, migliorandola, a fare una cosa del genere:

    codice:
    // CHIAMANTE
    for (int index = 0; index < choice.getItemCount(); index++)
    {
      setComponent(choice);
    }
    
    // METODO setComponent
    public void setComponent(Object component)
    {
    . . . . .
      else if (component instanceof Choice)
      {
        ((Choice) component).remove(0); 
        ((Choice) component).add(text); 
      }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da EngLab
    Sto creando un programma multilanguage
    Iniziamo a precisare questo. Vuoi che l'utente possa scegliere e cambiare la "lingua" della interfaccia utente?
    Allora ti dico subito che tipicamente (e perlomeno perché è più "pratico" a livello tecnico) la maggior parte dei software (in Java e non) che offre questa funzione effettua realmente il cambio della lingua al successivo avvio della applicazione.
    E questo perché generalmente è più semplice caricare e usare il "bundle" delle stringhe localizzate nel momento in cui si sta creando la interfaccia utente. E inoltre perché un cambio di lingua potrebbe voler dire cambiare (anche se in minima parte) il layout della interfaccia.

    Cambiare la lingua a runtime dinamicamente mentre la interfaccia è già visibile, tecnicamente è fattibile però richiede una certa attenzione (a tutti gli aspetti anche del layout) e magari andrebbe fatto in una maniera più pulita e "generica".

    Originariamente inviato da EngLab
    quando devo utilizzare le liste Choice?
    Che intendi per Choice?? Il java.awt.Choice? Se stai usando Swing, cerca di evitare i "mix" con componenti AWT.
    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 L'avatar di EngLab
    Registrato dal
    Jan 2006
    Messaggi
    496
    Mmm, sarebbe un bel casino, ed è un problema marginale.
    Ho risolto utilizzando una classe wrapper banale per le Stringhe.

    Codice PHP:
    package classificator.utility;

    public class 
    MyString {
        
    String string = new String();
        
        public 
    MyString() {
        }
        
        public 
    MyString(String myString) {
            
    setString(myString);
        }
        
        public 
    String getString() {
            return 
    string;
        }
        
        public 
    void setString(String newString) {
            
    string newString;
        }


  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da EngLab
    Codice PHP:
    public class MyString {
        
    String string = new String();
    .....    

    Posso solo ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.