1

私のメインクラスコード、問題は、変数が他のクラスから変更されたときにテキストフィールドが更新されないことです。変数を変更すると、フィールドだけが更新されません

    //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();
}

変数クラス

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

私のテキストフィールドは更新されませんが、変数が変更され、テキストフィールドは変更されません(プログラミングが初めてなので説明してください):Dありがとう!

4

2 に答える 2

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 );
    ...
}
于 2012-07-18T05:00:35.627 に答える
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;
}
于 2012-07-18T05:04:16.383 に答える