Brandom Cunningham
Brandom Cunningham

Reputation: 11

TextField WILL NOT UPDATE

My main class code, the problem is that my text fields will not update when the variables change form the other class, it does with changing variables, it just the field WILL NOT UPDATE

    //frame set up
    super("Calculator");
    setSize(500, 500);
    setResizable(false);
    super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    super.setVisible(true);

    JPanel main = new JPanel();
    JPanel stats = new JPanel();

    //layouts

    GridLayout mainV = new GridLayout(5, 5);
    GridLayout statsV = new GridLayout(2, 3);
    setLayout(mainV);

    //setting up textArea

    JTextField health = new JTextField("Health: " + var.health); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
    JTextField energy = new JTextField("Energy: " + var.energy); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
    JTextField land = new JTextField("Land: " + var.land); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
    JTextField cash = new JTextField("Cash: " + var.cash); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
    JTextField bullets = new JTextField("Bullets " + var.bullets); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
    JTextField update = new JTextField(); //UNUSED...

    //setting up editible

    update.setEditable(false);
    health.setEditable(false);
    energy.setEditable(false);
    land.setEditable(false);
    cash.setEditable(false);
    bullets.setEditable(false);
    update.setEditable(false);

    //setting up the text

    JButton Attack = new JButton("Attack"); 
    Attack.addActionListener(new ActionListener() {
        Attack attack = new Attack(); 

        public void actionPerformed(ActionEvent e) {
            Attack();  
        }

        private void Attack() {
            if (var.energy >= 5) {
                var.energy -= 5; 
                var.cash += 100; 
                var.bullets -= 1; 
            } else {
                var.health -= 1; 
            }
        }
    });
    JButton Rest = new JButton("Rest");
    Rest.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Rest(); 
        }

        private void Rest() {
            var.energy += 10; 
            var.cash -= 50; 
        }
    });
    JButton SellLand = new JButton("Sell Land"); 
    SellLand.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            sellLand(); 
        }

        private void sellLand() {
            var.land -= 1; 
            var.cash += 500; 
            System.out.println("Working"); 
            System.out.println(var.cash + "  " + var.land); 
        }
    });  
    JButton BuyBullets = new JButton("Buy Bullets"); 
    BuyBullets.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            BuyBullets(); 
        }

        private void BuyBullets() {
            var.cash -= 100; 
        }
    });  

    ButtonGroup actions = new ButtonGroup(); 

    add(health);
    add(energy); 
    add(bullets);
    add(land);
    add(cash); 
    add(Attack); 
    add(Rest);
    add(SellLand);
    add(BuyBullets); 
    setVisible(true); 

    String SHealth = "Health: " + var.health;
    String SEnergy = "Energy: " + var.energy;
    String SLand = "Land: " + var.land;
    String SCash = "Cash: " + var.cash;
    String SBullets = "Bullet(s): " + var.bullets;

    land.setText(SLand); 
    cash.setText(SCash); 
    bullets.setText(SBullets);
}

public static void main(String[] args) {
    new Main();
}

VARIBLES CLASS

int health = 3; 
int energy = 15; 
int land = 1; 
int cash = 100; 
int bullets = 5; 

please help my text fields will NOT UPDATE, but the variables are changing, text field will not change (im new at programming so please explain) :D thanks!

Upvotes: 1

Views: 2337

Answers (2)

sunil
sunil

Reputation: 6604

you need to update the texts of your textfields using settext method.

updated classes

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class TestFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    private Var var = new Var();

    JTextField health;
    JTextField energy;
    JTextField land;
    JTextField cash;
    JTextField bullets;
    JTextField update ;
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                TestFrame thisClass = new TestFrame();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    /**
     * This is the default constructor
     */
    public TestFrame() {
        super("Calculator");
        setSize(500, 500);
        setResizable(false);
        super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        super.setVisible(true);

        JPanel main = new JPanel();
        JPanel stats = new JPanel();

        //layouts

        GridLayout mainV = new GridLayout(5, 5);
        GridLayout statsV = new GridLayout(2, 3);
        setLayout(mainV);

        //setting up textArea

        health = new JTextField("Health: " + var.health); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        energy = new JTextField("Energy: " + var.energy); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        land = new JTextField("Land: " + var.land); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        cash = new JTextField("Cash: " + var.cash); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        bullets = new JTextField("Bullets " + var.bullets); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        update = new JTextField(); //UNUSED...

        //setting up editible

        update.setEditable(false);
        health.setEditable(false);
        energy.setEditable(false);
        land.setEditable(false);
        cash.setEditable(false);
        bullets.setEditable(false);
        update.setEditable(false);

        //setting up the text

        JButton Attack = new JButton("Attack"); 
        Attack.addActionListener(new ActionListener() {
           // Attack attack = new Attack(); 

            public void actionPerformed(ActionEvent e) {
                Attack();  
            }

            private void Attack() {
                if (var.energy >= 5) {
                    var.energy -= 5; 
                    var.cash += 100; 
                    var.bullets -= 1; 
                } else {
                    var.health -= 1; 
                }
                updateTextFields();
            }
        });
        JButton Rest = new JButton("Rest");
        Rest.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Rest(); 
            }

            private void Rest() {
                var.energy += 10; 
                var.cash -= 50; 
                updateTextFields();
            }
        });
        JButton SellLand = new JButton("Sell Land"); 
        SellLand.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sellLand(); 
            }

            private void sellLand() {
                var.land -= 1; 
                var.cash += 500; 
                System.out.println("Working"); 
                System.out.println(var.cash + "  " + var.land); 
                updateTextFields();
            }
        });  
        JButton BuyBullets = new JButton("Buy Bullets"); 
        BuyBullets.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                BuyBullets(); 
            }

            private void BuyBullets() {
                var.cash -= 100; 
                updateTextFields();
            }
        });  

        ButtonGroup actions = new ButtonGroup(); 

        add(health);
        add(energy); 
        add(bullets);
        add(land);
        add(cash); 
        add(Attack); 
        add(Rest);
        add(SellLand);
        add(BuyBullets); 
        setVisible(true); 

        String SHealth = "Health: " + var.health;
        String SEnergy = "Energy: " + var.energy;
        String SLand = "Land: " + var.land;
        String SCash = "Cash: " + var.cash;
        String SBullets = "Bullet(s): " + var.bullets;

        land.setText(SLand); 
        cash.setText(SCash); 
        bullets.setText(SBullets);
    }

    private void updateTextFields()
    {
        health.setText("Health: " + var.health); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        energy.setText("Energy: " + var.energy); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        land.setText("Land: " + var.land); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        cash.setText("Cash: " + var.cash); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        bullets.setText("Bullets " + var.bullets); //WONT UPDATE!!!!!!!!!!!!!(But varibles do, not the textField)
        update.setText(""); //UNUSED...
    }




}

your Var class

public class Var {
    int health = 3; 
    int energy = 15; 
    int land = 1; 
    int cash = 100; 
    int bullets = 5;
}

Upvotes: 2

wolfcastle
wolfcastle

Reputation: 5930

That is completely expected. The JTextField knows nothing about your variables. When you construct the JTextFields:

new JTextField("Health: " + var.health)

You are simply passing a string to the JTextField that is comprised of "Health" plus the current value of var.health. If var.health changes later, the JTextField has no idea.

If you want the text to update, it is up to you to monitor the variables, and when they change, update the text of the JTextFields:

// Call this whenever the variables change
private void updateText() {
    health.setText( "Health: " + var.health );
    ...
}

Upvotes: 2

Related Questions