2012-07-18 2 views
1

Mon principal code de classe, le problème est que mes champs de texte ne sera pas mise à jour lorsque les variables changent de forme l'autre classe, il le fait avec des variables changeantes, juste le champ NE METTRE À JOURTextField NE METTRE À JOUR

//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 CLASSE

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

s'il vous plaît aider mes champs de texte n'actualisera pas, mais les variables changent, champ de texte ne changera pas (im nouveau à la programmation afin d'expliquer s'il vous plaît): D merci!

+0

Avez-vous devez explicitement d'int à la chaîne? –

+0

désolé ce que cela signifie ... im un newb –

+0

s'il vous plaît le déboguer – Conan

Répondre

2

Cela est complètement attendu. Le JTextField ne sait rien de vos variables. Lorsque vous construisez les JTextFields:

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

Vous passez simplement une chaîne à la JTextField qui est composé de « santé », plus la valeur actuelle de var.health. Si var.health change plus tard, le JTextField n'en a aucune idée.

Si vous voulez que le texte à jour, il vous appartient de surveiller les variables, et quand ils changent, mettez à jour le texte des JTextFields:

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

vous devez mettre à jour les textes de vos textfields en utilisant la méthode settext.

cours mis à jour

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... 
    } 




} 

votre classe Var

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