我的主要类代码,问题是当变量从另一个类改变时我的文本字段不会更新,它与更改变量有关,它只是字段不会更新
//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;
请帮助我的文字字段不会更新,但变量正在变化,文字字段不会改变(我在编程时很新,所以请解释):D谢谢!
答案 0 :(得分:2)
完全可以预料到。 JTextField对您的变量一无所知。构造JTextFields时:
new JTextField("Health: " + var.health)
您只是将字符串传递给由“Health”和var.health的当前值组成的JTextField。如果var.health稍后更改,则JTextField不知道。
如果您希望更新文本,则需要监视变量,并在更改时更新JTextField的文本:
// Call this whenever the variables change
private void updateText() {
health.setText( "Health: " + var.health );
...
}
答案 1 :(得分:2)
您需要使用settext方法更新文本字段的文本。
更新了课程
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...
}
}
你的Var类
public class Var {
int health = 3;
int energy = 15;
int land = 1;
int cash = 100;
int bullets = 5;
}