Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    7

    [JAVA] Utilizzare il testo scritto in una jTextField

    Salve a tutti,
    mi scuso in anticipo per eventuali errori che potrò commettere ma sto cercando di imparare a programmare in Java da non molto tempo.
    Il mio problema è che ho una classe (Calcolo) ed un frame (Testo).
    Su questo frame ho un jButton ed una jTextField, mentre nella classe ho dichiarato un valore int (int = 6 * a) e vorrei che il valore di "a" cambi a seconda del numero che viene scritto nella TextField.
    Grazie mille.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Java ha una sezione dedicata del forum.

    Sposto.


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da G2000 Visualizza il messaggio
    Salve a tutti,
    mi scuso in anticipo per eventuali errori che potrò commettere ma sto cercando di imparare a programmare in Java da non molto tempo.
    Il mio problema è che ho una classe (Calcolo) ed un frame (Testo).
    Su questo frame ho un jButton ed una jTextField, mentre nella classe ho dichiarato un valore int (int = 6 * a) e vorrei che il valore di "a" cambi a seconda del numero che viene scritto nella TextField.
    Grazie mille.
    E dove ti sei bloccato/a?

    Per prendere il valore contenuto nel JTextField basta utilizzare il metodo getText() del JTextField stesso.
    Poi basta passare il valore alla classe Calcolo e lo setti alla tua variabile...

    Tra questi due passaggi ovviamente dovresti controllare la correttezza del valore inserito, in modo più o meno dettagliato a seconda delle tue esigenze.

    Se riscontri altri problemi o non ti è chiaro il procedimento chiedi pure, ma in realtà è abbastanza semplice la cosa

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    7
    Grazie per avermi risposto.
    Ho già utilizzato il metodo getText() in passato, il problema è che non so come applicarlo al mio contesto.
    Mi spiego meglio: l'IDE che sto utilizzando è NetBeans che consente di creare un Frame graficamente evitando quindi di scrivere il codice.
    Io devo quindi prendere il valore inserito nella jTextField (disegnata tramite l'interfaccia grafica dell'IDE) e utilizzarlo nella classe.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ok, capisco che possa essere utile evitare di scrivere a mano il codice, ma con queste informazioni a disposizione è difficile dirti di più.

    Personalmente non ho mai utilizzato IDE di alcun genere e ho sempre fatto tutto a mano, prova a postare il codice a cui sei arrivato se non riesci a risolvere.

    Tieni comunque presente che la parte relativa all'acquisizione del testo è praticamente obbligatoria: devi memorizzare da qualche parte un riferimento al JTextField e poi richiamare il metodo getText() su di esso.In realtà il componente lo potresti anche "recuperare" dal frame con una serie di chiamate a getComponent(), ma la cosa è più lunga e abbastanza oscena da vedere (lo so perché lo facevo anch'io in passato )

    Semmai la parte che potrebbe essere fatta in più modi e a seconda della tua situazione è come passare il valore alla classe e come controllare che sia effettivamente un numero, e in caso contrario scegliere come comportarsi.

    Detto questo senza vedere cosa hai fatto fin ora non saprei più che dire ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    7
    Allora, il codice che ho scritto fino ad ora è questo:

    package constructions;


    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;



    public class classe_grafico extends JFrame{



    private MioPanel A;
    private Container c;

    public classe_grafico(){
    super ("Disegna auto");
    A = new MioPanel();
    c=getContentPane();
    c.add(A);
    setSize (500,420);
    setLocation (100,200);
    setResizable (true);
    setVisible(true);
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    }
    class MioPanel extends JPanel{
    public void paintComponent(Graphics g){
    super.paintComponent(g);

    Font f = new Font("Times Roman",Font.BOLD,20);
    g.setFont(f);

    g.fillOval(120,220,60,60);
    g.fillOval(320,220,60,60);
    g.setColor(Color.blue);
    g.drawRect(50,150,400,70);
    g.drawLine(10,10,20,20);
    g.drawLine(330,150,300,100);
    g.drawLine(300,100,200,100);
    g.setColor(Color.yellow);
    g.fillRect(50,170,20,30);
    g.setColor(Color.red);
    g.fillRect(430,150,20,30);
    g.setColor(Color.cyan);
    g.drawString("Automobile",300,100);

    }
    }
    }
    Su un altro frame devo posizionare un tasto ed una casella di testo.
    Il valore scritto nella casella di testo deve poi essere utilizzato come coordinata di posizionamento del primo cerchio (x), mentre quando premo il tasto si deve aprire il frame con sopra il disegno.
    Grazie mille

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da G2000 Visualizza il messaggio
    Allora, il codice che ho scritto fino ad ora è questo:

    Prima di tutto ricordati di inserire il codice all'interno dei tag [CODE] per mantenerlo ben formattato.


    Poi alcune indicazioni da tenere a mente: è sempre bene utilizzare le convenzioni del linguaggio Java per il nome di classi e variabili: in particolare nelle classi è bene utilizzare una lettera maiuscola per ogni parola composta (nel tuo caso "classe_grafico" viene tipicamente scritta come "ClasseGrafico"), mentre le variabili dovrebbero iniziare con la minuscola, ed avere nomi significativi, quindi potresti utilizzare un nome come "panel" o "myPanel" al posto di "A".


    Quote Originariamente inviata da G2000 Visualizza il messaggio
    Su un altro frame devo posizionare un tasto ed una casella di testo.
    Il valore scritto nella casella di testo deve poi essere utilizzato come coordinata di posizionamento del primo cerchio (x), mentre quando premo il tasto si deve aprire il frame con sopra il disegno.

    Questa parte è relativamente facile, come dicevo: il frame che richiedi ha pochi componenti e deve avere come variabili il JTextField per poter accedere al testo quando viene cliccato il bottone (in realtà non è strettamente necessario se usi una Nested Class come ActionListener, ma per ora eviterei...) e sarebbe una buona cosa che avesse come variabile anche il frame in cui disegni la macchina.


    In questo modo alla pressione del bottone potresti fare due cose: se il frame con la macchina non è ancora stato creato lo crei da 0, se invece esiste già aggiorni la posizione della macchina passando al pannello corrispondente il valore inserito nel JTextField.


    Ti ho scritto un esempietto stupido di come potresti fare quanto dico sopra: in particolare mi pare sensato che la coordinata x del primo cerchio venga memorizzata nel pannello e che tutte le altre figure abbiano le coordinate riferite a tale x (ho fatto solo una modifica veloce al tuo paintComponent, le linee sopra alla macchina dovrebbero essere posizionate con più attenzione, cambia tu questa parte )


    codice:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.Graphics;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    public class MainFrame extends JFrame
    {
        private ClasseGrafico classeGrafico;
        private JTextField textField;
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run(){
                    new MainFrame().setVisible(true);
                }
            });
        }
        public MainFrame()
        {
            super("Gestore Automobile");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setResizable(false);
            Container pane=getContentPane();
            pane.add(new JLabel("Imposta l'ascissa del primo cerchio: "),BorderLayout.WEST);
            pane.add(textField=new JTextField("100",15),BorderLayout.EAST);
            JButton button=new JButton("Aggiorna Pannello");
            button.addActionListener(new ButtonListener());
            pane.add(button,BorderLayout.SOUTH);
            pack();
            setLocationRelativeTo(null);
        }
        private class ButtonListener implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                String text=textField.getText();
                try
                {
                    int x = Integer.valueOf(text);
                    if(classeGrafico==null)(classeGrafico=new ClasseGrafico(x)).setVisible(true);
                    else classeGrafico.updatePanel(x);
                }
                catch(NumberFormatException ex){
                    // Il valore inserito nel JTextField non è corretto, scegli cosa fare ...
                }
            }
        }
    }
    class ClasseGrafico extends JFrame
    {
        private MioPanel panel;    
        public ClasseGrafico(int x)
        {
            super("Disegna auto");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            getContentPane().add(panel=new MioPanel(x));
            setPreferredSize(new Dimension(500,420));
            setLocation(100,200);
            setResizable(true);
            pack();
            panel.repaint();
        }
        public void updatePanel(int x)
        {
            panel.setX(x);
            panel.repaint();
        }
        class MioPanel extends JPanel
        {
            private int x;
            private Font font=new Font("Times Roman",Font.BOLD,20);
            public MioPanel(int x){
                this.x=x;
            }        
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                g.setFont(font);
                g.fillOval(x,220,60,60);
                g.fillOval(x+200,220,60,60);
                g.setColor(Color.blue);
                g.drawRect(x-70,150,400,70);
                g.drawLine(x-110,10,20,20);
                g.drawLine(x+210,150,300,100);
                g.drawLine(x+180,100,200,100);
                g.setColor(Color.yellow);
                g.fillRect(x-70,170,20,30);
                g.setColor(Color.red);
                g.fillRect(x+310,150,20,30);
                g.setColor(Color.cyan);
                g.drawString("Automobile",x+180,100);
            }
            public void setX(int newValue)
            {
                x=newValue;
            }
        }
    }

    Torna pure per qualsiasi dubbio
    Ultima modifica di Ansharja; 22-05-2016 a 22:31

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    7
    Ho provato e funziona tutto benissimo.
    Ora, so di essere molto scocciante però, cosa dovrei fare se volessi collegare l'intera classe ad un JButton presente in un altro JFrame?
    Grazie mille

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da G2000 Visualizza il messaggio
    cosa dovrei fare se volessi collegare l'intera classe ad un JButton presente in un altro JFrame?
    Se vuoi che le due classi siano in qualche modo "collegate" (il termine è abbastanza improprio secondo me) devi semplicemente fare in modo di mantenere un riferimento a un oggetto della classe A nella classe B.

    Se noti è quello che ho fatto nel codice sopra riportato: MainFrame e ClasseGrafico sono due classi distinte ed entrambe estendono JFrame.
    Da MainFrame al momento del clic sul pulsante "Aggiorna Pannello" si crea un oggetto della classe ClasseGrafico, o se esiste già si aggiorna il pannello con la nuova posizione.
    Questo è fatto semplicemente assegnando come variabile alla classe MainFrame un oggetto di tipo ClasseGrafico, quindi dalla classe MainFrame puoi creare il frame,modificarlo o distruggerlo semplicemente agendo su quella variabile, ovvero "classeGrafico" nel codice sopra ...

    Se il codice che ho postato è chiaro dovresti riuscire a modificarlo a tuo piacimento per fare cose simili o anche più avanzate...
    Ultima modifica di Ansharja; 23-05-2016 a 17:22

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    7
    Perfetto, grazie mille per le risposte e ti chiedo scusa se ti ho arrecato disturbo. A buon rendere.

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.