Reputation: 11
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
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
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